cvs-nserver-commits Mailing List for CVS with rewritten network layer (Page 17)
Brought to you by:
tyranny
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(41) |
Sep
(69) |
Oct
(12) |
Nov
(35) |
Dec
(43) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(12) |
Feb
(19) |
Mar
(55) |
Apr
(25) |
May
(69) |
Jun
(33) |
Jul
(3) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2003 |
Jan
|
Feb
|
Mar
|
Apr
(35) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Alexey M. <ty...@us...> - 2001-09-16 15:36:23
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv4707 Modified Files: Tag: NCLI-1-11-1 .cvsignore Makefile.am Makefile.in branch-acl.c dir-acl.c dir-acl.h Added Files: Tag: NCLI-1-11-1 check_default_file_acl.c check_default_file_acl.sh Log Message: Implement per-dir-default file ACLs --- NEW FILE: check_default_file_acl.c --- #include "check_acl.h" #include "dir-acl.h" #include "branch-acl.h" #include <assert.h> #include <stdio.h> #include <stdlib.h> void check_default_file_acl (void) { struct DIR_ACL *topdir_acl; struct BRANCH_ACL *trunk_acl; struct BRANCH_ACE *foo_ace; topdir_acl = get_dir_acl("./test-acl", "trunk"); assert(topdir_acl != NULL); /* we set the default file permissions */ assert(set_default_file_acl(topdir_acl, "trunk", "alice", branch_perm_checkout) == branch_perm_checkout); trunk_acl = get_branch_acl(topdir_acl, "trunk"); assert(trunk_acl != NULL); foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); assert(foo_ace != NULL); /* check that newly set default file permissions are honoured */ assert(branch_permission_granted(foo_ace, "alice", branch_perm_checkout)); assert(!branch_permission_granted(foo_ace, "alice", branch_perm_checkin)); /* check that default file permissions are honoured */ assert(branch_permission_granted(foo_ace, "bob", branch_perm_checkout)); assert(branch_permission_granted(foo_ace, "bob", branch_perm_checkin)); } static void check_persistent_default_file_acl (void) { struct DIR_ACL *topdir_acl; struct BRANCH_ACL *trunk_acl; struct BRANCH_ACE *foo_ace; topdir_acl = get_dir_acl("./test-acl", "trunk"); assert(topdir_acl); /* we set the default file permissions... */ assert(set_default_file_acl(topdir_acl, "trunk", "alice", branch_perm_checkin) == branch_perm_checkin); /* ... store them to disk ... */ if (store_dir_acl(topdir_acl) != 0) { perror("Storing dir ACL"); exit(1); } /* ... and read them back */ topdir_acl = get_dir_acl("./test-acl", "trunk"); assert(topdir_acl != NULL); trunk_acl = get_branch_acl(topdir_acl, "trunk"); assert(trunk_acl != NULL); foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); /* check that newly set default file permissions are honoured */ assert(branch_permission_granted(foo_ace, "alice", branch_perm_checkin)); assert(!branch_permission_granted(foo_ace, "alice", branch_perm_checkout)); /* check that default file permissions are honoured */ assert(branch_permission_granted(foo_ace, "bob", branch_perm_checkout)); assert(branch_permission_granted(foo_ace, "bob", branch_perm_checkin)); } int main (void) { check_default_file_acl(); check_persistent_default_file_acl(); exit(0); } --- NEW FILE: check_default_file_acl.sh --- #! /bin/sh [ -d ./test-acl/ ] || mkdir ./test-acl/ touch ./test-acl/foo if ./check_default_file_acl; then rm -rf -- ./test-acl/ else exit $? fi Index: .cvsignore =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/.cvsignore,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- .cvsignore 2001/09/09 18:44:17 1.1.2.3 +++ .cvsignore 2001/09/16 15:36:21 1.1.2.4 @@ -3,5 +3,7 @@ check_stringbuf check_user_acl check_acl +check_dir_acl check_persistent_acl +check_default_file_acl test-*.txt Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- Makefile.am 2001/09/16 12:35:25 1.1.2.6 +++ Makefile.am 2001/09/16 15:36:21 1.1.2.7 @@ -1,12 +1,14 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr TESTS = cleanup.sh check_stringbuf check_user_acl \ - check_acl.sh check_persistent_acl.sh check_dir_acl.sh + check_acl.sh check_persistent_acl.sh check_dir_acl.sh \ + check_default_file_acl.sh noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl \ - check_dir_acl + check_dir_acl check_default_file_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh +noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh \ + check_default_file_acl.sh noinst_LIBRARIES = libcvsacl.a @@ -27,6 +29,9 @@ check_dir_acl_LDADD = -lcvsacl -L. check_dir_acl_DEPENDENCIES = libcvsacl.a + +check_default_file_acl_LDADD = -lcvsacl -L. +check_default_file_acl_DEPENDENCIES = libcvsacl.a check_user_acl_SOURCES = \ check_user_acl.c \ Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- Makefile.in 2001/09/16 12:35:25 1.1.2.6 +++ Makefile.in 2001/09/16 15:36:21 1.1.2.7 @@ -87,14 +87,17 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr TESTS = cleanup.sh check_stringbuf check_user_acl \ - check_acl.sh check_persistent_acl.sh check_dir_acl.sh + check_acl.sh check_persistent_acl.sh check_dir_acl.sh \ + check_default_file_acl.sh noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl \ - check_dir_acl + check_dir_acl check_default_file_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh +noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh \ + check_default_file_acl.sh + noinst_LIBRARIES = libcvsacl.a @@ -118,6 +121,9 @@ check_dir_acl_LDADD = -lcvsacl -L. check_dir_acl_DEPENDENCIES = libcvsacl.a +check_default_file_acl_LDADD = -lcvsacl -L. +check_default_file_acl_DEPENDENCIES = libcvsacl.a + check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c @@ -140,13 +146,16 @@ libcvsacl_a_OBJECTS = $(am_libcvsacl_a_OBJECTS) noinst_PROGRAMS = check_stringbuf$(EXEEXT) check_user_acl$(EXEEXT) \ check_acl$(EXEEXT) check_persistent_acl$(EXEEXT) \ - check_dir_acl$(EXEEXT) + check_dir_acl$(EXEEXT) check_default_file_acl$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) \ check_branch_acl$U.$(OBJEXT) check_acl_OBJECTS = $(am_check_acl_OBJECTS) check_acl_LDFLAGS = +check_default_file_acl_SOURCES = check_default_file_acl.c +check_default_file_acl_OBJECTS = check_default_file_acl$U.$(OBJEXT) +check_default_file_acl_LDFLAGS = check_dir_acl_SOURCES = check_dir_acl.c check_dir_acl_OBJECTS = check_dir_acl$U.$(OBJEXT) check_dir_acl_LDFLAGS = @@ -177,6 +186,7 @@ @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/branch-acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_branch_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_default_file_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_dir_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_persistent_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_stringbuf$U.Po \ @@ -189,10 +199,10 @@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ DIST_SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) \ - check_dir_acl.c check_persistent_acl.c \ + check_default_file_acl.c check_dir_acl.c check_persistent_acl.c \ $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) DIST_COMMON = Makefile.am Makefile.in -SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) check_dir_acl.c check_persistent_acl.c $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) +SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) check_default_file_acl.c check_dir_acl.c check_persistent_acl.c $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) all: all-am @@ -218,6 +228,9 @@ check_acl$(EXEEXT): $(check_acl_OBJECTS) $(check_acl_DEPENDENCIES) @rm -f check_acl$(EXEEXT) $(LINK) $(check_acl_LDFLAGS) $(check_acl_OBJECTS) $(check_acl_LDADD) $(LIBS) +check_default_file_acl$(EXEEXT): $(check_default_file_acl_OBJECTS) $(check_default_file_acl_DEPENDENCIES) + @rm -f check_default_file_acl$(EXEEXT) + $(LINK) $(check_default_file_acl_LDFLAGS) $(check_default_file_acl_OBJECTS) $(check_default_file_acl_LDADD) $(LIBS) check_dir_acl$(EXEEXT): $(check_dir_acl_OBJECTS) $(check_dir_acl_DEPENDENCIES) @rm -f check_dir_acl$(EXEEXT) $(LINK) $(check_dir_acl_LDFLAGS) $(check_dir_acl_OBJECTS) $(check_dir_acl_LDADD) $(LIBS) @@ -247,6 +260,7 @@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/branch-acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_branch_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_default_file_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_dir_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_persistent_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_stringbuf$U.Po@_am_quote@ @@ -276,6 +290,8 @@ $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_acl.c; then echo $(srcdir)/check_acl.c; else echo check_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_acl_.c || rm -f check_acl_.c check_branch_acl_.c: check_branch_acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_branch_acl.c; then echo $(srcdir)/check_branch_acl.c; else echo check_branch_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_branch_acl_.c || rm -f check_branch_acl_.c +check_default_file_acl_.c: check_default_file_acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_default_file_acl.c; then echo $(srcdir)/check_default_file_acl.c; else echo check_default_file_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_default_file_acl_.c || rm -f check_default_file_acl_.c check_dir_acl_.c: check_dir_acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_dir_acl.c; then echo $(srcdir)/check_dir_acl.c; else echo check_dir_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_dir_acl_.c || rm -f check_dir_acl_.c check_persistent_acl_.c: check_persistent_acl.c $(ANSI2KNR) @@ -291,9 +307,10 @@ user-acl_.c: user-acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/user-acl.c; then echo $(srcdir)/user-acl.c; else echo user-acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > user-acl_.c || rm -f user-acl_.c branch-acl_.$(OBJEXT) check_acl_.$(OBJEXT) check_branch_acl_.$(OBJEXT) \ -check_dir_acl_.$(OBJEXT) check_persistent_acl_.$(OBJEXT) \ -check_stringbuf_.$(OBJEXT) check_user_acl_.$(OBJEXT) dir-acl_.$(OBJEXT) \ -stringbuf_.$(OBJEXT) user-acl_.$(OBJEXT) : $(ANSI2KNR) +check_default_file_acl_.$(OBJEXT) check_dir_acl_.$(OBJEXT) \ +check_persistent_acl_.$(OBJEXT) check_stringbuf_.$(OBJEXT) \ +check_user_acl_.$(OBJEXT) dir-acl_.$(OBJEXT) stringbuf_.$(OBJEXT) \ +user-acl_.$(OBJEXT) : $(ANSI2KNR) uninstall-info-am: tags: TAGS Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- branch-acl.c 2001/09/09 20:08:21 1.1.2.6 +++ branch-acl.c 2001/09/16 15:36:21 1.1.2.7 @@ -119,8 +119,12 @@ USER_ACE *ace; /* no list of users, use default permissions */ - if (branch_ace->user_acls == NULL) - return default_branch_perm & perm; + if (branch_ace->user_acls == NULL) { + ace = get_user_ace(branch_ace->acl->dir_acl->default_file_acl, username); + if (ace == NULL) + return default_branch_perm & perm; + return ace->perm & perm; + } ace = get_user_ace(branch_ace->user_acls, username); Index: dir-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-acl.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- dir-acl.c 2001/09/16 12:35:25 1.1.2.3 +++ dir-acl.c 2001/09/16 15:36:21 1.1.2.4 @@ -20,6 +20,7 @@ #include "config.h" #include "dir-acl.h" +#include "branch-acl.h" #include "user-acl.h" #include <errno.h> @@ -73,6 +74,7 @@ while (fgets(buf, MAX_LINE_SIZE, acl) != NULL) { int len = strlen(buf); char *p = buf; + char initial_char; char *branch; char *username; char *perm_string; @@ -81,7 +83,11 @@ goto err; buf[len - 1] = '\0'; - branch = buf; + initial_char = *p++; + if ((initial_char != '/') && (initial_char != 'D')) + continue; + + branch = p; while (*p && (*p != '\t')) p++; if (!*p) @@ -107,7 +113,18 @@ if (*p) goto err; - set_dir_ace(dir_acl, username, parse_dir_permissions(perm_string)); + if (initial_char == '/') + set_dir_ace(dir_acl, username, parse_dir_permissions(perm_string)); + if (initial_char == 'D') { + struct USER_ACL *new_acl; + + new_acl = set_user_ace(dir_acl->default_file_acl, username, + parse_branch_permissions(perm_string)); + if (new_acl == NULL) + goto err; + + dir_acl->default_file_acl = new_acl; + } } fclose(acl); @@ -188,35 +205,53 @@ } -int -store_dir_acl (struct DIR_ACL *dir_acl) +static int +internal_store_dir_acl (int fd, DIR_ACL *dir_acl) { - int fd; int retval = -1; - struct stringbuf *filename = NULL; - struct stringbuf *tmpfilename = NULL; struct stringbuf *line = NULL; int saved_len; struct USER_ACL *user_acl = dir_acl->user_acls; - filename = dup_stringbuf(dir_acl->dirname); - if (filename == NULL) + line = new_stringbuf("/"); + if (line == NULL) goto out; - cat_stringbuf(filename, "/DIRACL"); + cat_stringbuf(line, "trunk"); + catc_stringbuf(line, '\t'); + saved_len = line->len; + while (user_acl != NULL) { + cat_stringbuf(line, user_acl->username); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, dir_permissions_string(user_acl->perm)); + catc_stringbuf(line, '\n'); - tmpfilename = dup_stringbuf(dir_acl->dirname); - if (tmpfilename == NULL) - goto out; + if (write(fd, line->buf, line->len) != line->len) + goto out; - cat_stringbuf(tmpfilename, "/DIRACL.tmp"); + shrink_stringbuf(line, saved_len); - line = new_stringbuf(""); - if (line == NULL) - goto out; + user_acl = user_acl->next; + } - fd = open(tmpfilename->buf, O_CREAT | O_EXCL | O_WRONLY, 0600); - if (fd == -1) + retval = 0; + + out: + free_stringbuf(line); + + return retval; +} + +static int +internal_store_default_file_acl (int fd, DIR_ACL *dir_acl) +{ + int retval = -1; + struct stringbuf *line = NULL; + int saved_len; + struct USER_ACL *user_acl = dir_acl->default_file_acl; + + line = new_stringbuf("D"); + if (line == NULL) goto out; cat_stringbuf(line, "trunk"); @@ -225,7 +260,7 @@ while (user_acl != NULL) { cat_stringbuf(line, user_acl->username); catc_stringbuf(line, '\t'); - cat_stringbuf(line, dir_permissions_string(user_acl->perm)); + cat_stringbuf(line, branch_permissions_string(user_acl->perm)); catc_stringbuf(line, '\n'); if (write(fd, line->buf, line->len) != line->len) @@ -236,6 +271,43 @@ user_acl = user_acl->next; } + retval = 0; + out: + free_stringbuf(line); + + return retval; +} + +int +store_dir_acl (struct DIR_ACL *dir_acl) +{ + int fd; + int retval = -1; + struct stringbuf *filename = NULL; + struct stringbuf *tmpfilename = NULL; + + filename = dup_stringbuf(dir_acl->dirname); + if (filename == NULL) + goto out; + + cat_stringbuf(filename, "/DIRACL"); + + tmpfilename = dup_stringbuf(dir_acl->dirname); + if (tmpfilename == NULL) + goto out; + + cat_stringbuf(tmpfilename, "/DIRACL.tmp"); + + fd = open(tmpfilename->buf, O_CREAT | O_EXCL | O_WRONLY, 0600); + if (fd == -1) + goto out; + + if (internal_store_dir_acl(fd, dir_acl) != 0) + goto out; + + if (internal_store_default_file_acl(fd, dir_acl) != 0) + goto out; + if (close(fd) == -1) goto out; @@ -245,7 +317,20 @@ retval = 0; out: free_stringbuf(tmpfilename); - free_stringbuf(line); return retval; +} + +int +set_default_file_acl (DIR_ACL *dir_acl, char *branch, char *username, int perm) +{ + struct USER_ACL *new_acls; + + new_acls = set_user_ace(dir_acl->default_file_acl, username, perm); + if (new_acls == NULL) + return branch_perm_none; + + dir_acl->default_file_acl = new_acls; + + return perm; } Index: dir-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-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 --- dir-acl.h 2001/09/16 12:35:25 1.1.2.2 +++ dir-acl.h 2001/09/16 15:36:21 1.1.2.3 @@ -23,6 +23,7 @@ struct DIR_ACL { stringbuf *dirname; struct USER_ACL *user_acls; + struct USER_ACL *default_file_acl; }; enum DIR_PERM { @@ -45,5 +46,7 @@ int dir_permission_granted (struct DIR_ACL *dir_acl, char *username, int perm); int store_dir_acl (struct DIR_ACL *dir_acl); + +int set_default_file_acl (DIR_ACL *dir_acl, char *branch, char *username, int perm); #endif /* DIR_ACL_H */ |
From: Alexey M. <ty...@us...> - 2001-09-16 15:32:59
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv3857 Modified Files: Tag: NCLI-1-11-1 check_acl.sh check_dir_acl.sh cleanup.sh check_persistent_acl.sh Log Message: Fix she-bang line Index: check_acl.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.sh,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- check_acl.sh 2001/09/16 12:10:38 1.1.2.3 +++ check_acl.sh 2001/09/16 15:32:56 1.1.2.4 @@ -1,4 +1,4 @@ -#! /bin/bash +#! /bin/sh [ -d ./test-acl ] || mkdir ./test-acl Index: check_dir_acl.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_dir_acl.sh,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_dir_acl.sh 2001/09/16 12:35:25 1.1.2.1 +++ check_dir_acl.sh 2001/09/16 15:32:56 1.1.2.2 @@ -1,4 +1,4 @@ -#! /bin/bash +#! /bin/sh if ./check_dir_acl; then rm -rf -- ./test-acl/; Index: cleanup.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/cleanup.sh,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- cleanup.sh 2001/09/16 12:27:08 1.1.2.2 +++ cleanup.sh 2001/09/16 15:32:56 1.1.2.3 @@ -1,4 +1,4 @@ -#! /bin/bash +#!/bin/sh echo -n "Cleaning up the test space... " rm -rf -- /tmp/acl-test/ ./test-acl/ Index: check_persistent_acl.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_persistent_acl.sh,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_persistent_acl.sh 2001/09/09 18:44:17 1.1.2.1 +++ check_persistent_acl.sh 2001/09/16 15:32:56 1.1.2.2 @@ -1,4 +1,4 @@ -#! /bin/bash +#!/bin/sh [ -d ./test-acl ] || mkdir ./test-acl |
From: Alexey M. <ty...@us...> - 2001-09-16 15:32:27
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv3744 Modified Files: Tag: NCLI-1-11-1 stringbuf.c check_stringbuf.c Log Message: Fix off-by-one error Index: stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/stringbuf.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- stringbuf.c 2001/08/29 21:16:34 1.1.2.3 +++ stringbuf.c 2001/09/16 15:32:22 1.1.2.4 @@ -82,12 +82,13 @@ struct stringbuf * catc_stringbuf (struct stringbuf *buf, char c) { - if (buf->len + 1 > buf->allocated) { - char *tmp = (char *) realloc(buf->buf, buf->allocated * 2); + if (buf->len + 1 >= buf->allocated) { + int needs_to_allocate = buf->allocated * 2; + char *tmp = (char *) realloc(buf->buf, needs_to_allocate); if (tmp == NULL) return NULL; buf->buf = tmp; - buf->allocated = buf->allocated * 2; + buf->allocated = needs_to_allocate; } buf->buf[buf->len++] = c; buf->buf[buf->len] = '\0'; @@ -111,7 +112,7 @@ return buf; if (buf->len + len > buf->allocated) { - int needs_to_allocate = buf->allocated + len * 2; + int needs_to_allocate = buf->allocated + len * 2 + 1; char *tmp = (char *) realloc(buf->buf, needs_to_allocate); if (tmp == NULL) return NULL; Index: check_stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_stringbuf.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- check_stringbuf.c 2001/09/09 20:08:21 1.1.2.3 +++ check_stringbuf.c 2001/09/16 15:32:22 1.1.2.4 @@ -127,7 +127,7 @@ assert(buf->allocated > buf->len); /* add characters until there is a need to reallocate */ - while (buf->allocated > buf->len) { + while (buf->allocated > buf->len + 1) { struct stringbuf *tmp; tmp = catc_stringbuf(buf, 'c'); } @@ -180,7 +180,7 @@ assert(strcmp(buf->buf, "foo") == 0); /* add characters until there is a need to reallocate */ - while (buf->allocated > buf->len) { + while (buf->allocated > buf->len + 1) { struct stringbuf *tmp; tmp = catc_stringbuf(buf, 'c'); } |
From: Alexey M. <ty...@us...> - 2001-09-16 12:35:28
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv7716 Modified Files: Tag: NCLI-1-11-1 Makefile.am Makefile.in branch-acl.h check_branch_acl.c check_dir_acl.c check_persistent_acl.c dir-acl.c dir-acl.h Added Files: Tag: NCLI-1-11-1 check_dir_acl.sh Log Message: Implement persistent directory-level ACLs --- NEW FILE: check_dir_acl.sh --- #! /bin/bash if ./check_dir_acl; then rm -rf -- ./test-acl/; else exit $? fi Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- Makefile.am 2001/09/09 20:08:21 1.1.2.5 +++ Makefile.am 2001/09/16 12:35:25 1.1.2.6 @@ -1,11 +1,12 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr TESTS = cleanup.sh check_stringbuf check_user_acl \ - check_acl.sh check_persistent_acl.sh + check_acl.sh check_persistent_acl.sh check_dir_acl.sh -noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl \ + check_dir_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh check_persistent_acl.sh +noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh noinst_LIBRARIES = libcvsacl.a @@ -19,10 +20,13 @@ check_acl_SOURCES = \ check_acl.h check_acl.c \ - check_branch_acl.c check_dir_acl.c + check_branch_acl.c check_acl_LDADD = -lcvsacl -L. check_acl_DEPENDENCIES = libcvsacl.a + +check_dir_acl_LDADD = -lcvsacl -L. +check_dir_acl_DEPENDENCIES = libcvsacl.a check_user_acl_SOURCES = \ check_user_acl.c \ Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- Makefile.in 2001/09/09 20:08:21 1.1.2.5 +++ Makefile.in 2001/09/16 12:35:25 1.1.2.6 @@ -87,12 +87,14 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr TESTS = cleanup.sh check_stringbuf check_user_acl \ - check_acl.sh check_persistent_acl.sh + check_acl.sh check_persistent_acl.sh check_dir_acl.sh -noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl \ + check_dir_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh check_persistent_acl.sh + +noinst_SCRIPTS = cleanup.sh check_acl.sh check_dir_acl.sh check_persistent_acl.sh noinst_LIBRARIES = libcvsacl.a @@ -107,12 +109,15 @@ check_acl_SOURCES = \ check_acl.h check_acl.c \ - check_branch_acl.c check_dir_acl.c + check_branch_acl.c check_acl_LDADD = -lcvsacl -L. check_acl_DEPENDENCIES = libcvsacl.a +check_dir_acl_LDADD = -lcvsacl -L. +check_dir_acl_DEPENDENCIES = libcvsacl.a + check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c @@ -134,13 +139,17 @@ stringbuf$U.$(OBJEXT) user-acl$U.$(OBJEXT) libcvsacl_a_OBJECTS = $(am_libcvsacl_a_OBJECTS) noinst_PROGRAMS = check_stringbuf$(EXEEXT) check_user_acl$(EXEEXT) \ - check_acl$(EXEEXT) check_persistent_acl$(EXEEXT) + check_acl$(EXEEXT) check_persistent_acl$(EXEEXT) \ + check_dir_acl$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) \ - check_branch_acl$U.$(OBJEXT) check_dir_acl$U.$(OBJEXT) + check_branch_acl$U.$(OBJEXT) check_acl_OBJECTS = $(am_check_acl_OBJECTS) check_acl_LDFLAGS = +check_dir_acl_SOURCES = check_dir_acl.c +check_dir_acl_OBJECTS = check_dir_acl$U.$(OBJEXT) +check_dir_acl_LDFLAGS = check_persistent_acl_SOURCES = check_persistent_acl.c check_persistent_acl_OBJECTS = check_persistent_acl$U.$(OBJEXT) check_persistent_acl_LDFLAGS = @@ -180,10 +189,10 @@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ DIST_SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) \ - check_persistent_acl.c $(check_stringbuf_SOURCES) \ - $(check_user_acl_SOURCES) + check_dir_acl.c check_persistent_acl.c \ + $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) DIST_COMMON = Makefile.am Makefile.in -SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) check_persistent_acl.c $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) +SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) check_dir_acl.c check_persistent_acl.c $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) all: all-am @@ -209,6 +218,9 @@ check_acl$(EXEEXT): $(check_acl_OBJECTS) $(check_acl_DEPENDENCIES) @rm -f check_acl$(EXEEXT) $(LINK) $(check_acl_LDFLAGS) $(check_acl_OBJECTS) $(check_acl_LDADD) $(LIBS) +check_dir_acl$(EXEEXT): $(check_dir_acl_OBJECTS) $(check_dir_acl_DEPENDENCIES) + @rm -f check_dir_acl$(EXEEXT) + $(LINK) $(check_dir_acl_LDFLAGS) $(check_dir_acl_OBJECTS) $(check_dir_acl_LDADD) $(LIBS) check_persistent_acl$(EXEEXT): $(check_persistent_acl_OBJECTS) $(check_persistent_acl_DEPENDENCIES) @rm -f check_persistent_acl$(EXEEXT) $(LINK) $(check_persistent_acl_LDFLAGS) $(check_persistent_acl_OBJECTS) $(check_persistent_acl_LDADD) $(LIBS) Index: branch-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.h,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- branch-acl.h 2001/09/09 16:59:57 1.1.2.5 +++ branch-acl.h 2001/09/16 12:35:25 1.1.2.6 @@ -43,10 +43,11 @@ typedef struct BRANCH_ACL BRANCH_ACL; -enum { +enum BRANCH_PERM { branch_perm_none = 0x00, branch_perm_checkout = 0x01, branch_perm_checkin = 0x02, + branch_perm_all = branch_perm_checkout | branch_perm_checkin, default_branch_perm = branch_perm_checkout | branch_perm_checkin }; @@ -54,7 +55,7 @@ BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *branch); -BRANCH_ACE *get_file_on_branch_ace (BRANCH_ACL *branch_acl, +BRANCH_ACE *get_file_on_branch_ace (BRANCH_ACL *branch_acl, char *branch, char *file); int set_branch_ace (BRANCH_ACE *branch_ace, char *username, Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- check_branch_acl.c 2001/09/09 20:08:21 1.1.2.6 +++ check_branch_acl.c 2001/09/16 12:35:25 1.1.2.7 @@ -32,7 +32,7 @@ BRANCH_ACL *trunk_acl; /* check that ACLs don't work for non-existing file */ - topdir_acl = start_acl_traverse(top_dir); + topdir_acl = get_dir_acl(top_dir, "trunk"); assert(topdir_acl != NULL); trunk_acl = get_branch_acl(topdir_acl, "trunk"); @@ -63,7 +63,7 @@ int new_perm; char trunk[] = "trunk"; - topdir_acl = start_acl_traverse(top_dir); + topdir_acl = get_dir_acl(top_dir, "trunk"); assert(topdir_acl != NULL); /* get list of permissions for trunk, it should be empty */ Index: check_dir_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_dir_acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_dir_acl.c 2001/08/29 19:58:45 1.1.2.1 +++ check_dir_acl.c 2001/09/16 12:35:25 1.1.2.2 @@ -15,29 +15,132 @@ */ +#include "config.h" + #include "check_acl.h" #include "dir-acl.h" +#include "user-acl.h" #include <assert.h> #include <errno.h> #include <stdlib.h> +#include <stdio.h> +#include <sys/stat.h> -void check_nonexisting_dir_acl (char *top_dir) + +static void +check_perm_parsing (void) { + assert(parse_dir_permissions("INVALID") == dir_perm_none); + assert(parse_dir_permissions("access") == dir_perm_access); + assert(parse_dir_permissions("modify") == dir_perm_modify); + assert(parse_dir_permissions("access,modify") == dir_perm_all); + assert(parse_dir_permissions("modify,access") == dir_perm_all); + + assert(strcmp(dir_permissions_string(dir_perm_none), "none") == 0); + assert(strcmp(dir_permissions_string(dir_perm_access), "access") == 0); + assert(strcmp(dir_permissions_string(dir_perm_modify), "modify") == 0); + assert(strcmp(dir_permissions_string(dir_perm_all), "access,modify") == 0); +} + +void +check_nonexisting_dir_acl (char *top_dir) +{ DIR_ACL *topdir_acl; /* check that ACLs don't work for non-existing directory */ - topdir_acl = start_acl_traverse(top_dir); + topdir_acl = get_dir_acl(top_dir, "trunk"); assert(topdir_acl == NULL); assert(errno == ENOENT); } -void check_existing_dir_acl (char *top_dir) +void +check_existing_dir_acl (char *top_dir) { - /* check that ACLs get created for existing directory */ - DIR_ACL *topdir_acl = start_acl_traverse(top_dir); + DIR_ACL *topdir_acl; + + /* check that default ACLs get created for existing directory */ + topdir_acl = get_dir_acl(top_dir, "trunk"); assert(topdir_acl != NULL); + assert(topdir_acl->user_acls == NULL); + + /* check that default permissions allow everything */ + assert(dir_permission_granted(topdir_acl, "vasya", dir_perm_access)); + assert(dir_permission_granted(topdir_acl, "vasya", dir_perm_modify)); + + /* try to set the permissions on directory and see if it works */ + assert(set_dir_ace(topdir_acl, "vasya", dir_perm_access)); + assert(dir_permission_granted(topdir_acl, "vasya", dir_perm_access)); + assert(!dir_permission_granted(topdir_acl, "vasya", dir_perm_modify)); } +static void +check_persistent_dir_acl (void) +{ + struct DIR_ACL *topdir_acl = get_dir_acl("./test-acl", "trunk"); + assert(topdir_acl); + + assert(set_dir_ace(topdir_acl, "alice", dir_perm_access) == dir_perm_access); + assert(set_dir_ace(topdir_acl, "bob", dir_perm_modify) == dir_perm_modify); + assert(set_dir_ace(topdir_acl, "dave", dir_perm_all) == dir_perm_all); + + if (store_dir_acl(topdir_acl) != 0) { + perror("Storing dir ACL"); + exit(1); + } + + topdir_acl = get_dir_acl("./test-acl", "trunk"); + assert(topdir_acl); + + /* alice gets only access permissions */ + assert(dir_permission_granted(topdir_acl, "alice", dir_perm_access)); + assert(!dir_permission_granted(topdir_acl, "alice", dir_perm_modify)); + + /* bob gets only modify permissions */ + assert(!dir_permission_granted(topdir_acl, "bob", dir_perm_access)); + assert(dir_permission_granted(topdir_acl, "bob", dir_perm_modify)); + + /* carol doesn't get permissions */ + assert(!dir_permission_granted(topdir_acl, "carol", dir_perm_access)); + assert(!dir_permission_granted(topdir_acl, "carol", dir_perm_modify)); + + /* dave gets both access and modify permissions */ + assert(dir_permission_granted(topdir_acl, "dave", dir_perm_access)); + assert(dir_permission_granted(topdir_acl, "dave", dir_perm_modify)); + + /* now revoke bob's permissions and check that it persists */ + assert(set_dir_ace(topdir_acl, "bob", dir_perm_none) == dir_perm_none); + + if (store_dir_acl(topdir_acl) != 0) { + perror("Storing dir ACL"); + exit(1); + } + + topdir_acl = get_dir_acl("./test-acl", "trunk"); + assert(topdir_acl); + + assert(!dir_permission_granted(topdir_acl, "bob", dir_perm_access)); + assert(!dir_permission_granted(topdir_acl, "bob", dir_perm_modify)); +} + +int +main (void) +{ + check_perm_parsing(); + + check_nonexisting_dir_acl("./test-acl"); + + /* create that directory */ + if (mkdir("./test-acl", 0755) == -1) { + perror("check_acl"); + exit (1); + } + + check_existing_dir_acl("./test-acl"); + + check_persistent_dir_acl(); + + exit(0); +} Index: check_persistent_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_persistent_acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- check_persistent_acl.c 2001/09/09 20:08:21 1.1.2.2 +++ check_persistent_acl.c 2001/09/16 12:35:25 1.1.2.3 @@ -35,7 +35,7 @@ BRANCH_ACE *bar_ace; int new_perm; - topdir_acl = start_acl_traverse("./test-acl"); + topdir_acl = get_dir_acl("./test-acl", "trunk"); assert(topdir_acl != NULL); /* get default permissions for existing file */ @@ -92,7 +92,7 @@ BRANCH_ACE *foo_ace; BRANCH_ACE *bar_ace; - dir_acl = start_acl_traverse("./test-acl"); + dir_acl = get_dir_acl("./test-acl", "trunk"); assert(dir_acl != NULL); trunk_acl = get_branch_acl(dir_acl, "trunk"); @@ -136,7 +136,7 @@ BRANCH_ACL *trunk_acl; BRANCH_ACE *quux_ace; - dir_acl = start_acl_traverse("./test-acl"); + dir_acl = get_dir_acl("./test-acl", "trunk"); assert(dir_acl != NULL); trunk_acl = get_branch_acl(dir_acl, "trunk"); Index: dir-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- dir-acl.c 2001/08/29 19:56:54 1.1.2.2 +++ dir-acl.c 2001/09/16 12:35:25 1.1.2.3 @@ -15,37 +15,237 @@ */ +#define _BSD_SOURCE 1 + #include "config.h" #include "dir-acl.h" +#include "user-acl.h" +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H -#include "unistd.h" +#include <unistd.h> #endif +#define MAX_LINE_SIZE 128 DIR_ACL * -start_acl_traverse (char *dir) +get_dir_acl (char *dir, char *branch) { + FILE *acl; struct DIR_ACL *dir_acl; struct stat stat_buf; + struct stringbuf *filename; + char buf[MAX_LINE_SIZE]; - if (stat(dir, &stat_buf) == -1) { - + errno = 0; + + if (stat(dir, &stat_buf) == -1) return NULL; - } - dir_acl = (DIR_ACL *) malloc(sizeof(struct DIR_ACL)); + dir_acl = (DIR_ACL *) calloc(1, sizeof(struct DIR_ACL)); if (dir_acl == NULL) return NULL; dir_acl->dirname = new_stringbuf(dir); + if (dir_acl->dirname == NULL) { + free(dir_acl); + return NULL; + } + + filename = dup_stringbuf(dir_acl->dirname); + if (filename == NULL) { + free(dir_acl); + return NULL; + } + cat_stringbuf(filename, "/DIRACL"); + + acl = fopen(filename->buf, "r"); + if (acl == NULL) + goto out; + + while (fgets(buf, MAX_LINE_SIZE, acl) != NULL) { + int len = strlen(buf); + char *p = buf; + char *branch; + char *username; + char *perm_string; + + if (buf[len] != '\0') + goto err; + + buf[len - 1] = '\0'; + branch = buf; + while (*p && (*p != '\t')) + p++; + if (!*p) + goto err; + + *p++ = '\0'; + if (strcmp(branch, "trunk") != 0) + continue; + + username = p; + while (*p && (*p != '\t')) + p++; + if (!*p) + goto err; + + *p++ = '\0'; + perm_string = p; + + while (*p && (*p != 't')) + p++; + + if (*p) + goto err; + + set_dir_ace(dir_acl, username, parse_dir_permissions(perm_string)); + } + + fclose(acl); + return dir_acl; + + err: + free_stringbuf(filename); + if (acl != NULL) + fclose(acl); + dir_acl = NULL; + + out: + return dir_acl; +} + + + +int +dir_permission_granted (struct DIR_ACL *dir_acl, char *username, int perm) +{ + USER_ACE *ace; + + if (dir_acl->user_acls == NULL) + return default_dir_perm & perm; + + ace = get_user_ace(dir_acl->user_acls, username); + + if (ace == NULL) + return 0; + + return ace->perm & perm; } +int +set_dir_ace (struct DIR_ACL *dir_acl, char *username, int perm) +{ + dir_acl->user_acls = set_user_ace(dir_acl->user_acls, username, perm); + + return perm; +} + + +int parse_dir_permissions (char *perm_string) +{ + if (strcmp(perm_string, "access") == 0) + return dir_perm_access; + + if (strcmp(perm_string, "modify") == 0) + return dir_perm_modify; + + if (strcmp(perm_string, "access,modify") == 0) + return dir_perm_all; + + if (strcmp(perm_string, "modify,access") == 0) + return dir_perm_all; + + return dir_perm_none; +} + +char * +dir_permissions_string (int perm) +{ + if (perm == dir_perm_none) + return "none"; + + if (perm == dir_perm_access) + return "access"; + + if (perm == dir_perm_modify) + return "modify"; + + if (perm == dir_perm_all) + return "access,modify"; + + return "invalid"; +} + + +int +store_dir_acl (struct DIR_ACL *dir_acl) +{ + int fd; + int retval = -1; + struct stringbuf *filename = NULL; + struct stringbuf *tmpfilename = NULL; + struct stringbuf *line = NULL; + int saved_len; + struct USER_ACL *user_acl = dir_acl->user_acls; + + filename = dup_stringbuf(dir_acl->dirname); + if (filename == NULL) + goto out; + + cat_stringbuf(filename, "/DIRACL"); + + tmpfilename = dup_stringbuf(dir_acl->dirname); + if (tmpfilename == NULL) + goto out; + + cat_stringbuf(tmpfilename, "/DIRACL.tmp"); + + line = new_stringbuf(""); + if (line == NULL) + goto out; + + fd = open(tmpfilename->buf, O_CREAT | O_EXCL | O_WRONLY, 0600); + if (fd == -1) + goto out; + + cat_stringbuf(line, "trunk"); + catc_stringbuf(line, '\t'); + saved_len = line->len; + while (user_acl != NULL) { + cat_stringbuf(line, user_acl->username); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, dir_permissions_string(user_acl->perm)); + catc_stringbuf(line, '\n'); + + if (write(fd, line->buf, line->len) != line->len) + goto out; + + shrink_stringbuf(line, saved_len); + + user_acl = user_acl->next; + } + + if (close(fd) == -1) + goto out; + + if (rename(tmpfilename->buf, filename->buf) == -1) + goto out; + + retval = 0; + out: + free_stringbuf(tmpfilename); + free_stringbuf(line); + + return retval; +} Index: dir-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-acl.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- dir-acl.h 2001/08/29 17:28:51 1.1.2.1 +++ dir-acl.h 2001/09/16 12:35:25 1.1.2.2 @@ -22,11 +22,28 @@ struct DIR_ACL { stringbuf *dirname; + struct USER_ACL *user_acls; +}; + +enum DIR_PERM { + dir_perm_none = 0x00, + dir_perm_access = 0x01, + dir_perm_modify = 0x02, + dir_perm_all = dir_perm_access | dir_perm_modify, + default_dir_perm = dir_perm_access | dir_perm_modify }; typedef struct DIR_ACL DIR_ACL; -DIR_ACL *start_acl_traverse(char *dir); +DIR_ACL *get_dir_acl(char *dir, char *branch); +int parse_dir_permissions(char *perm_string); +char *dir_permissions_string(int perm); + +int set_dir_ace (struct DIR_ACL *dir_acl, char *username, int perm); + +int dir_permission_granted (struct DIR_ACL *dir_acl, char *username, int perm); + +int store_dir_acl (struct DIR_ACL *dir_acl); #endif /* DIR_ACL_H */ |
From: Alexey M. <ty...@us...> - 2001-09-16 12:27:10
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv6700 Modified Files: Tag: NCLI-1-11-1 cleanup.sh Log Message: Cleanup additional test directory Index: cleanup.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/cleanup.sh,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- cleanup.sh 2001/08/29 19:53:13 1.1.2.1 +++ cleanup.sh 2001/09/16 12:27:08 1.1.2.2 @@ -1,7 +1,7 @@ #! /bin/bash echo -n "Cleaning up the test space... " -rm -rf -- /tmp/acl-test/ +rm -rf -- /tmp/acl-test/ ./test-acl/ echo done exit 0 |
From: Alexey M. <ty...@us...> - 2001-09-16 12:10:43
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv4566 Modified Files: Tag: NCLI-1-11-1 check_acl.sh check_acl.c Log Message: Hardcode test directories Index: check_acl.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.sh,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- check_acl.sh 2001/09/09 20:08:21 1.1.2.2 +++ check_acl.sh 2001/09/16 12:10:38 1.1.2.3 @@ -1,5 +1,7 @@ #! /bin/bash +[ -d ./test-acl ] || mkdir ./test-acl + touch ./test-acl-non-readable.txt chmod 000 ./test-acl-non-readable.txt @@ -12,6 +14,8 @@ if ./check_acl; then rm -f ./test-acl-*.txt + rm -rf -- ./test-acl/ else exit $? fi + Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- check_acl.c 2001/09/09 18:44:17 1.1.2.6 +++ check_acl.c 2001/09/16 12:10:38 1.1.2.7 @@ -27,28 +27,15 @@ #include <sys/types.h> #include <unistd.h> -#define TOP_CHECK_DIR "/tmp/acl-test" - int main (void) { - char *top_dir = TOP_CHECK_DIR; int fd; - - check_nonexisting_dir_acl(top_dir); - /* create that directory */ - if (mkdir(TOP_CHECK_DIR, 0755) == -1) { - perror("check_acl"); - exit (1); - } - - check_existing_dir_acl(top_dir); - - check_nonexisting_file_acl(top_dir); + check_nonexisting_file_acl("./test-acl"); /* create that file */ - if ((fd = creat(TOP_CHECK_DIR "/foo", 0644)) == -1) { + if ((fd = creat("./test-acl/foo", 0644)) == -1) { perror("check_acl"); exit (1); } @@ -57,7 +44,7 @@ exit(1); } - check_existing_file_acl(top_dir); + check_existing_file_acl("./test-acl"); check_parsing_branch_permissions(); |
From: Alexey M. <ty...@us...> - 2001-09-09 20:08:25
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv5769 Modified Files: Tag: NCLI-1-11-1 Makefile.am Makefile.in branch-acl.c check_acl.sh check_branch_acl.c check_persistent_acl.c check_stringbuf.c Log Message: Test-suites depend on libcvsacl; verified that perm_none works perstitently; added copyright headers; reverted order of branch and filename in ./ACL file; tiny fixes Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- Makefile.am 2001/09/09 18:44:17 1.1.2.4 +++ Makefile.am 2001/09/09 20:08:21 1.1.2.5 @@ -22,9 +22,11 @@ check_branch_acl.c check_dir_acl.c check_acl_LDADD = -lcvsacl -L. +check_acl_DEPENDENCIES = libcvsacl.a check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c check_persistent_acl_LDADD = -lcvsacl -L. +check_persistent_acl_DEPENDENCIES = libcvsacl.a Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- Makefile.in 2001/09/09 18:44:17 1.1.2.4 +++ Makefile.in 2001/09/09 20:08:21 1.1.2.5 @@ -111,6 +111,7 @@ check_acl_LDADD = -lcvsacl -L. +check_acl_DEPENDENCIES = libcvsacl.a check_user_acl_SOURCES = \ check_user_acl.c \ @@ -118,6 +119,7 @@ check_persistent_acl_LDADD = -lcvsacl -L. +check_persistent_acl_DEPENDENCIES = libcvsacl.a EXEEXT = OBJEXT = o subdir = acl @@ -138,11 +140,9 @@ am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) \ check_branch_acl$U.$(OBJEXT) check_dir_acl$U.$(OBJEXT) check_acl_OBJECTS = $(am_check_acl_OBJECTS) -check_acl_DEPENDENCIES = check_acl_LDFLAGS = check_persistent_acl_SOURCES = check_persistent_acl.c check_persistent_acl_OBJECTS = check_persistent_acl$U.$(OBJEXT) -check_persistent_acl_DEPENDENCIES = check_persistent_acl_LDFLAGS = am_check_stringbuf_OBJECTS = check_stringbuf$U.$(OBJEXT) \ stringbuf$U.$(OBJEXT) Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- branch-acl.c 2001/09/09 16:59:57 1.1.2.5 +++ branch-acl.c 2001/09/09 20:08:21 1.1.2.6 @@ -94,7 +94,11 @@ catc_stringbuf(acl_filename, '/'); cat_stringbuf(acl_filename, "ACL"); - branch_ace->branch = branch; + branch_ace->branch = strdup(branch); + if (branch_ace->branch == NULL) { + free(branch_ace); + return NULL; + } if (internal_read_branch_acl_file(acl_filename->buf, branch_ace) != 0) { free(branch_ace); @@ -140,6 +144,7 @@ int parse_branch_permissions (char *perm_str) { + if (strcmp(perm_str, "checkin") == 0) return branch_perm_checkin; @@ -152,6 +157,9 @@ char * branch_permissions_string (int perm) { + if (perm == branch_perm_none) + return "none"; + if (perm == branch_perm_checkin) return "checkin"; @@ -206,14 +214,14 @@ if (initial_char != ' ') continue; - filename = p; + branch = p; EXTRACT_NEXT_LINE('\0'); - if (bacl && (strcmp(bacl->filename->buf, filename) != 0)) + if (bacl && (strcmp(bacl->branch, branch) != 0)) continue; - branch = p; + filename = p; EXTRACT_NEXT_LINE('\0'); - if (bacl && (strcmp(bacl->branch, branch) != 0)) + if (bacl && (strcmp(bacl->filename->buf, filename) != 0)) continue; username = p; @@ -279,9 +287,9 @@ while (current_ace != NULL) { shrink_stringbuf(line, 1); - cat_stringbuf(line, current_ace->filename->buf); - catc_stringbuf(line, '\t'); cat_stringbuf(line, current_ace->branch); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, current_ace->filename->buf); catc_stringbuf(line, '\t'); saved_len = line->len; Index: check_acl.sh =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.sh,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_acl.sh 2001/09/08 23:07:37 1.1.2.1 +++ check_acl.sh 2001/09/09 20:08:21 1.1.2.2 @@ -7,6 +7,9 @@ echo -e " file.c\tbranch\tuser\trights\tfoo\tbar" > ./test-acl-too-many.txt +for i in `seq 1 32`; do echo -n "too-long." >> ./test-acl-too-long-line.txt; done +echo >> ./test-acl-too-long-line.txt + if ./check_acl; then rm -f ./test-acl-*.txt else Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- check_branch_acl.c 2001/09/09 18:44:17 1.1.2.5 +++ check_branch_acl.c 2001/09/09 20:08:21 1.1.2.6 @@ -47,6 +47,8 @@ assert((internal_read_branch_acl_file("./test-acl-non-readable.txt", NULL) == -1) && (errno == EACCES)); + assert(internal_read_branch_acl_file("./test-acl-too-long-line.txt", NULL) == 1); + assert(internal_read_branch_acl_file("./test-acl-too-few.txt", NULL) == 1); assert(internal_read_branch_acl_file("./test-acl-too-many.txt", NULL) == 1); } @@ -59,6 +61,7 @@ BRANCH_ACL *trunk_acl; BRANCH_ACE *foo_ace; int new_perm; + char trunk[] = "trunk"; topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); @@ -70,7 +73,7 @@ assert(trunk_acl->first_ace == NULL); /* get list of permissions for file, it should be default */ - foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); + foo_ace = get_file_on_branch_ace(trunk_acl, trunk, "foo"); assert(foo_ace != NULL); assert(foo_ace->branch != NULL); assert(strcmp(foo_ace->branch, "trunk") == 0); @@ -81,6 +84,10 @@ assert(foo_ace->user_acls == NULL); assert(foo_ace->next == NULL); + /* check that foo_ace has its own copy of branch name */ + strcpy(trunk, "knurt"); + assert(strcmp(foo_ace->branch, "trunk") == 0); + /* default permissions allow to checkin/checkout revision on any branch */ assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkin)); assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); @@ -131,6 +138,8 @@ { assert(parse_branch_permissions("invalid") == branch_perm_none); + assert(parse_branch_permissions("none") == branch_perm_none); + assert(parse_branch_permissions("checkin") == branch_perm_checkin); assert(parse_branch_permissions("checkout") == branch_perm_checkout); @@ -139,4 +148,5 @@ assert(strcmp(branch_permissions_string(branch_perm_checkout), "checkout") == 0); + assert(strcmp(branch_permissions_string(branch_perm_none), "none") == 0); } Index: check_persistent_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_persistent_acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_persistent_acl.c 2001/09/09 18:44:17 1.1.2.1 +++ check_persistent_acl.c 2001/09/09 20:08:21 1.1.2.2 @@ -1,4 +1,21 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + Copyright (c) Alexey Mahotkin <al...@hs...> 2001 + + Test-suite for branch-level Access Control Lists stored to file +*/ + + #include "config.h" #include "dir-acl.h" @@ -8,7 +25,6 @@ #include <stdio.h> #include <stdlib.h> - static void check_single_persistent_file_acl (void) { @@ -113,11 +129,46 @@ assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkout)); } +static void +check_persistent_no_perm_acl (void) +{ + DIR_ACL *dir_acl; + BRANCH_ACL *trunk_acl; + BRANCH_ACE *quux_ace; + + dir_acl = start_acl_traverse("./test-acl"); + assert(dir_acl != NULL); + + trunk_acl = get_branch_acl(dir_acl, "trunk"); + assert(trunk_acl != NULL); + + quux_ace = get_file_on_branch_ace(trunk_acl, "trunk", "quux"); + assert(quux_ace != NULL); + + assert(set_branch_ace(quux_ace, "vasya", branch_perm_none) == branch_perm_none); + + if (!store_branch_acl(trunk_acl)) { + perror("Storing branch ACLs"); + exit(1); + } + + trunk_acl = get_branch_acl(dir_acl, "trunk"); + assert(trunk_acl != NULL); + + quux_ace = get_file_on_branch_ace(trunk_acl, "trunk", "quux"); + assert(quux_ace != NULL); + + assert(!branch_permission_granted(quux_ace, "vasya", branch_perm_checkin)); + assert(!branch_permission_granted(quux_ace, "vasya", branch_perm_checkout)); +} + int main (void) { check_single_persistent_file_acl(); check_several_persistent_files_acl(); + + check_persistent_no_perm_acl(); exit(0); } Index: check_stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_stringbuf.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- check_stringbuf.c 2001/08/29 21:16:34 1.1.2.2 +++ check_stringbuf.c 2001/09/09 20:08:21 1.1.2.3 @@ -1,3 +1,20 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + Copyright (c) Alexey Mahotkin <al...@hs...> 2001 + + Test-suite for struct stringbuf + +*/ + #include "stringbuf.h" |
From: Alexey M. <ty...@us...> - 2001-09-09 18:44:21
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv18545 Modified Files: Tag: NCLI-1-11-1 .cvsignore Makefile.am Makefile.in check_acl.c check_acl.h check_branch_acl.c Added Files: Tag: NCLI-1-11-1 check_persistent_acl.c check_persistent_acl.sh Log Message: Split "persistent ACL" tests to separate executable; verify that saving ACLs for several files works --- NEW FILE: check_persistent_acl.c --- #include "config.h" #include "dir-acl.h" #include "branch-acl.h" #include <assert.h> #include <stdio.h> #include <stdlib.h> static void check_single_persistent_file_acl (void) { DIR_ACL *topdir_acl; BRANCH_ACL *trunk_acl; BRANCH_ACE *foo_ace; BRANCH_ACE *foo_ace2; BRANCH_ACE *bar_ace; int new_perm; topdir_acl = start_acl_traverse("./test-acl"); assert(topdir_acl != NULL); /* get default permissions for existing file */ trunk_acl = get_branch_acl(topdir_acl, "trunk"); /* get ACE for file, causing it to be created */ foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); assert(foo_ace != NULL); /* set checkout permissions for vasya and save it to disk */ new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkout); new_perm = set_branch_ace(foo_ace, "petya", branch_perm_checkin); if (!store_branch_acl(trunk_acl)) { perror("Storing branch ACLs"); exit(1); } trunk_acl = get_branch_acl (topdir_acl, "trunk"); /* read those permissions from disk and check them */ foo_ace2 = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); assert(foo_ace2 != NULL); assert(foo_ace2->user_acls != NULL); assert(foo_ace2->fullpath != NULL); assert(foo_ace2->filename != NULL); assert(strcmp(foo_ace2->filename->buf, "foo") == 0); assert(foo_ace2->acl == trunk_acl); assert(branch_permission_granted(foo_ace2, "vasya", branch_perm_checkout)); assert(!branch_permission_granted(foo_ace2, "vasya", branch_perm_checkin)); assert(!branch_permission_granted(foo_ace2, "petya", branch_perm_checkout)); assert(branch_permission_granted(foo_ace2, "petya", branch_perm_checkin)); /* check that permissions for another file have not changed and are, in fact, default ones */ bar_ace = get_file_on_branch_ace(trunk_acl, "trunk", "bar"); assert(bar_ace != NULL); assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkout)); assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkin)); assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkout)); assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkin)); } static void check_several_persistent_files_acl (void) { DIR_ACL *dir_acl; BRANCH_ACL *trunk_acl; BRANCH_ACE *foo_ace; BRANCH_ACE *bar_ace; dir_acl = start_acl_traverse("./test-acl"); assert(dir_acl != NULL); trunk_acl = get_branch_acl(dir_acl, "trunk"); assert(trunk_acl != NULL); foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); assert(foo_ace != NULL); bar_ace = get_file_on_branch_ace(trunk_acl, "trunk", "bar"); assert(bar_ace != NULL); /* set different checkout permissions for files and save them to disk */ set_branch_ace(foo_ace, "vasya", branch_perm_checkout); set_branch_ace(foo_ace, "petya", branch_perm_checkin); set_branch_ace(bar_ace, "vasya", branch_perm_checkin); set_branch_ace(bar_ace, "petya", branch_perm_checkout); if (!store_branch_acl(trunk_acl)) { perror("Storing branch ACLs"); exit(1); } /* read those permissions back */ trunk_acl = get_branch_acl (dir_acl, "trunk"); assert(trunk_acl != NULL); foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); assert(foo_ace != NULL); bar_ace = get_file_on_branch_ace(trunk_acl, "trunk", "bar"); assert(bar_ace != NULL); assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); assert(branch_permission_granted(foo_ace, "petya", branch_perm_checkin)); assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkin)); assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkout)); } int main (void) { check_single_persistent_file_acl(); check_several_persistent_files_acl(); exit(0); } --- NEW FILE: check_persistent_acl.sh --- #! /bin/bash [ -d ./test-acl ] || mkdir ./test-acl if ./check_persistent_acl; then rm -rf -- ./test-acl/ else exit $? fi Index: .cvsignore =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/.cvsignore,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- .cvsignore 2001/09/08 23:07:37 1.1.2.2 +++ .cvsignore 2001/09/09 18:44:17 1.1.2.3 @@ -3,4 +3,5 @@ check_stringbuf check_user_acl check_acl +check_persistent_acl test-*.txt Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- Makefile.am 2001/09/08 23:07:37 1.1.2.3 +++ Makefile.am 2001/09/09 18:44:17 1.1.2.4 @@ -1,23 +1,30 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = cleanup.sh check_stringbuf check_user_acl check_acl.sh +TESTS = cleanup.sh check_stringbuf check_user_acl \ + check_acl.sh check_persistent_acl.sh -noinst_PROGRAMS = check_stringbuf check_user_acl check_acl +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh +noinst_SCRIPTS = cleanup.sh check_acl.sh check_persistent_acl.sh -check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c +noinst_LIBRARIES = libcvsacl.a -check_acl_SOURCES = \ - check_acl.h check_acl.c \ - check_branch_acl.c check_dir_acl.c \ +libcvsacl_a_SOURCES = \ branch-acl.h branch-acl.c \ dir-acl.h dir-acl.c \ stringbuf.h stringbuf.c \ user-acl.h user-acl.c +check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c + +check_acl_SOURCES = \ + check_acl.h check_acl.c \ + check_branch_acl.c check_dir_acl.c + +check_acl_LDADD = -lcvsacl -L. check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c +check_persistent_acl_LDADD = -lcvsacl -L. Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- Makefile.in 2001/09/08 23:07:37 1.1.2.3 +++ Makefile.in 2001/09/09 18:44:17 1.1.2.4 @@ -86,45 +86,64 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = cleanup.sh check_stringbuf check_user_acl check_acl.sh +TESTS = cleanup.sh check_stringbuf check_user_acl \ + check_acl.sh check_persistent_acl.sh -noinst_PROGRAMS = check_stringbuf check_user_acl check_acl -noinst_SCRIPTS = cleanup.sh check_acl.sh +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl check_persistent_acl -check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c +noinst_SCRIPTS = cleanup.sh check_acl.sh check_persistent_acl.sh -check_acl_SOURCES = \ - check_acl.h check_acl.c \ - check_branch_acl.c check_dir_acl.c \ +noinst_LIBRARIES = libcvsacl.a + +libcvsacl_a_SOURCES = \ branch-acl.h branch-acl.c \ dir-acl.h dir-acl.c \ stringbuf.h stringbuf.c \ user-acl.h user-acl.c +check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c + +check_acl_SOURCES = \ + check_acl.h check_acl.c \ + check_branch_acl.c check_dir_acl.c + + +check_acl_LDADD = -lcvsacl -L. + check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c + +check_persistent_acl_LDADD = -lcvsacl -L. EXEEXT = OBJEXT = o subdir = acl mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + +libcvsacl_a_AR = $(AR) cru +libcvsacl_a_LIBADD = +am_libcvsacl_a_OBJECTS = branch-acl$U.$(OBJEXT) dir-acl$U.$(OBJEXT) \ + stringbuf$U.$(OBJEXT) user-acl$U.$(OBJEXT) +libcvsacl_a_OBJECTS = $(am_libcvsacl_a_OBJECTS) noinst_PROGRAMS = check_stringbuf$(EXEEXT) check_user_acl$(EXEEXT) \ - check_acl$(EXEEXT) + check_acl$(EXEEXT) check_persistent_acl$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) \ - check_branch_acl$U.$(OBJEXT) check_dir_acl$U.$(OBJEXT) \ - branch-acl$U.$(OBJEXT) dir-acl$U.$(OBJEXT) \ - stringbuf$U.$(OBJEXT) user-acl$U.$(OBJEXT) + check_branch_acl$U.$(OBJEXT) check_dir_acl$U.$(OBJEXT) check_acl_OBJECTS = $(am_check_acl_OBJECTS) -check_acl_LDADD = $(LDADD) check_acl_DEPENDENCIES = check_acl_LDFLAGS = +check_persistent_acl_SOURCES = check_persistent_acl.c +check_persistent_acl_OBJECTS = check_persistent_acl$U.$(OBJEXT) +check_persistent_acl_DEPENDENCIES = +check_persistent_acl_LDFLAGS = am_check_stringbuf_OBJECTS = check_stringbuf$U.$(OBJEXT) \ stringbuf$U.$(OBJEXT) check_stringbuf_OBJECTS = $(am_check_stringbuf_OBJECTS) @@ -150,6 +169,7 @@ @AMDEP_TRUE@ $(DEPDIR)/check_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_branch_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_dir_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_persistent_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_stringbuf$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/check_user_acl$U.Po \ @AMDEP_TRUE@ $(DEPDIR)/dir-acl$U.Po $(DEPDIR)/stringbuf$U.Po \ @@ -159,10 +179,11 @@ CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ -DIST_SOURCES = $(check_acl_SOURCES) $(check_stringbuf_SOURCES) \ +DIST_SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) \ + check_persistent_acl.c $(check_stringbuf_SOURCES) \ $(check_user_acl_SOURCES) DIST_COMMON = Makefile.am Makefile.in -SOURCES = $(check_acl_SOURCES) $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) +SOURCES = $(libcvsacl_a_SOURCES) $(check_acl_SOURCES) check_persistent_acl.c $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) all: all-am @@ -176,11 +197,21 @@ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libcvsacl.a: $(libcvsacl_a_OBJECTS) $(libcvsacl_a_DEPENDENCIES) + -rm -f libcvsacl.a + $(libcvsacl_a_AR) libcvsacl.a $(libcvsacl_a_OBJECTS) $(libcvsacl_a_LIBADD) + $(RANLIB) libcvsacl.a + clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) check_acl$(EXEEXT): $(check_acl_OBJECTS) $(check_acl_DEPENDENCIES) @rm -f check_acl$(EXEEXT) $(LINK) $(check_acl_LDFLAGS) $(check_acl_OBJECTS) $(check_acl_LDADD) $(LIBS) +check_persistent_acl$(EXEEXT): $(check_persistent_acl_OBJECTS) $(check_persistent_acl_DEPENDENCIES) + @rm -f check_persistent_acl$(EXEEXT) + $(LINK) $(check_persistent_acl_LDFLAGS) $(check_persistent_acl_OBJECTS) $(check_persistent_acl_LDADD) $(LIBS) check_stringbuf$(EXEEXT): $(check_stringbuf_OBJECTS) $(check_stringbuf_DEPENDENCIES) @rm -f check_stringbuf$(EXEEXT) $(LINK) $(check_stringbuf_LDFLAGS) $(check_stringbuf_OBJECTS) $(check_stringbuf_LDADD) $(LIBS) @@ -205,6 +236,7 @@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_branch_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_dir_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_persistent_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_stringbuf$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_user_acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/dir-acl$U.Po@_am_quote@ @@ -234,6 +266,8 @@ $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_branch_acl.c; then echo $(srcdir)/check_branch_acl.c; else echo check_branch_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_branch_acl_.c || rm -f check_branch_acl_.c check_dir_acl_.c: check_dir_acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_dir_acl.c; then echo $(srcdir)/check_dir_acl.c; else echo check_dir_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_dir_acl_.c || rm -f check_dir_acl_.c +check_persistent_acl_.c: check_persistent_acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_persistent_acl.c; then echo $(srcdir)/check_persistent_acl.c; else echo check_persistent_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_persistent_acl_.c || rm -f check_persistent_acl_.c check_stringbuf_.c: check_stringbuf.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_stringbuf.c; then echo $(srcdir)/check_stringbuf.c; else echo check_stringbuf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_stringbuf_.c || rm -f check_stringbuf_.c check_user_acl_.c: check_user_acl.c $(ANSI2KNR) @@ -245,9 +279,9 @@ user-acl_.c: user-acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/user-acl.c; then echo $(srcdir)/user-acl.c; else echo user-acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > user-acl_.c || rm -f user-acl_.c branch-acl_.$(OBJEXT) check_acl_.$(OBJEXT) check_branch_acl_.$(OBJEXT) \ -check_dir_acl_.$(OBJEXT) check_stringbuf_.$(OBJEXT) \ -check_user_acl_.$(OBJEXT) dir-acl_.$(OBJEXT) stringbuf_.$(OBJEXT) \ -user-acl_.$(OBJEXT) : $(ANSI2KNR) +check_dir_acl_.$(OBJEXT) check_persistent_acl_.$(OBJEXT) \ +check_stringbuf_.$(OBJEXT) check_user_acl_.$(OBJEXT) dir-acl_.$(OBJEXT) \ +stringbuf_.$(OBJEXT) user-acl_.$(OBJEXT) : $(ANSI2KNR) uninstall-info-am: tags: TAGS @@ -361,7 +395,7 @@ check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am -all-am: Makefile $(PROGRAMS) $(SCRIPTS) +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) installdirs: @@ -390,7 +424,8 @@ @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ + mostlyclean-am distclean: distclean-am @@ -428,15 +463,15 @@ uninstall-info: uninstall-info-am .PHONY: all all-am check check-TESTS check-am clean clean-generic \ - clean-noinstPROGRAMS distclean distclean-compile \ - distclean-depend distclean-generic distclean-tags distdir dvi \ - dvi-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-kr tags uninstall uninstall-am \ - uninstall-info-am + clean-noinstLIBRARIES clean-noinstPROGRAMS distclean \ + distclean-compile distclean-depend distclean-generic \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-kr tags \ + uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- check_acl.c 2001/09/08 23:09:04 1.1.2.5 +++ check_acl.c 2001/09/09 18:44:17 1.1.2.6 @@ -63,7 +63,5 @@ check_reading_acl_file(); - check_persistent_file_acl(top_dir); - exit (0); } Index: check_acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- check_acl.h 2001/09/08 23:09:04 1.1.2.3 +++ check_acl.h 2001/09/09 18:44:17 1.1.2.4 @@ -27,6 +27,5 @@ void check_parsing_branch_permissions (void); void check_reading_acl_file (void); -void check_persistent_file_acl (char *top_dir); #endif /* CHECK_ACL_H */ Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- check_branch_acl.c 2001/09/09 16:59:57 1.1.2.4 +++ check_branch_acl.c 2001/09/09 18:44:17 1.1.2.5 @@ -127,65 +127,6 @@ } void -check_persistent_file_acl (char *top_dir) -{ - DIR_ACL *topdir_acl; - BRANCH_ACL *trunk_acl; - BRANCH_ACE *foo_ace; - BRANCH_ACE *foo_ace2; - BRANCH_ACE *bar_ace; - int new_perm; - - topdir_acl = start_acl_traverse(top_dir); - assert(topdir_acl != NULL); - - /* get default permissions for existing file */ - trunk_acl = get_branch_acl(topdir_acl, "trunk"); - - /* get ACE for file, causing it to be created */ - foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); - assert(foo_ace != NULL); - - /* set checkout permissions for vasya and save it to disk */ - new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkout); - new_perm = set_branch_ace(foo_ace, "petya", branch_perm_checkin); - - if (!store_branch_acl(trunk_acl)) { - perror("Storing branch ACLs"); - exit(1); - } - - trunk_acl = get_branch_acl (topdir_acl, "trunk"); - - /* read those permissions from disk and check them */ - foo_ace2 = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); - assert(foo_ace2 != NULL); - assert(foo_ace2->user_acls != NULL); - assert(foo_ace2->fullpath != NULL); - assert(foo_ace2->filename != NULL); - assert(strcmp(foo_ace2->filename->buf, "foo") == 0); - assert(foo_ace2->acl == trunk_acl); - - assert(branch_permission_granted(foo_ace2, "vasya", branch_perm_checkout)); - assert(!branch_permission_granted(foo_ace2, "vasya", branch_perm_checkin)); - - assert(!branch_permission_granted(foo_ace2, "petya", branch_perm_checkout)); - assert(branch_permission_granted(foo_ace2, "petya", branch_perm_checkin)); - - - /* check that permissions for another file have not changed and - are, in fact, default ones */ - bar_ace = get_file_on_branch_ace(trunk_acl, "trunk", "bar"); - assert(bar_ace != NULL); - - assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkout)); - assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkin)); - assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkout)); - assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkin)); -} - - -void check_parsing_branch_permissions (void) { assert(parse_branch_permissions("invalid") == branch_perm_none); |
From: Alexey M. <ty...@us...> - 2001-09-09 17:00:03
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv28274 Modified Files: Tag: NCLI-1-11-1 branch-acl.c branch-acl.h check_branch_acl.c Log Message: Great renaming of BRANCH_ACL to BRANCH_ACE; creation of real BRANCH_ACL; persistent branch-level ACLs mostly works Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- branch-acl.c 2001/09/08 23:09:04 1.1.2.4 +++ branch-acl.c 2001/09/09 16:59:57 1.1.2.5 @@ -15,6 +15,7 @@ */ +#define _BSD_SOURCE 1 #include "config.h" @@ -25,6 +26,7 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H @@ -32,66 +34,91 @@ #endif BRANCH_ACL * -get_branch_acl (DIR_ACL *dir_acl, char *filename, char *branch) +get_branch_acl (DIR_ACL *dir_acl, char *branch) { - BRANCH_ACL * branch_acl; - struct stat stat_buf; - struct stringbuf *acl_filename; + struct BRANCH_ACL *branch_acl; - branch_acl = (BRANCH_ACL*) calloc(1, sizeof(struct BRANCH_ACL)); + branch_acl = calloc(1, sizeof(struct BRANCH_ACL)); if (branch_acl == NULL) return NULL; - branch_acl->filename = new_stringbuf(filename); - if (branch_acl->filename == NULL) { - free(branch_acl); - return NULL; + branch_acl->dir_acl = dir_acl; + + return branch_acl; +} + + +BRANCH_ACE * +get_file_on_branch_ace (BRANCH_ACL *branch_acl, char *branch, char *filename) +{ + BRANCH_ACE *current = branch_acl->first_ace; + BRANCH_ACE *branch_ace = NULL; + struct stringbuf *acl_filename; + + while (current != NULL) { + if (strcmp(current->filename->buf, filename) == 0) { + branch_ace = current; + break; + } + current = current->next; } - branch_acl->fullpath = dup_stringbuf(dir_acl->dirname); - if (branch_acl->fullpath == NULL) { - free(branch_acl); + branch_ace = calloc(1, sizeof(struct BRANCH_ACE)); + if (branch_ace == NULL) return NULL; - } - catc_stringbuf(branch_acl->fullpath, '/'); - cat_stringbuf(branch_acl->fullpath, filename); + branch_ace->acl = branch_acl; - if (stat(branch_acl->fullpath->buf, &stat_buf) == -1) { - free(branch_acl); + branch_ace->branch = strdup(branch); + if (branch_ace->branch == NULL) { + free(branch_ace); return NULL; } - branch_acl->dir_acl = dir_acl; + branch_ace->filename = new_stringbuf(filename); + if (branch_ace->filename == NULL) { + free(branch_ace); + return NULL; + } + + branch_ace->fullpath = dup_stringbuf(branch_acl->dir_acl->dirname); + if (branch_ace->fullpath == NULL) { + free(branch_ace); + return NULL; + } + catc_stringbuf(branch_ace->fullpath, '/'); + cat_stringbuf(branch_ace->fullpath, filename); /* try to open ACL file, if it exists */ - acl_filename = dup_stringbuf(dir_acl->dirname); + acl_filename = dup_stringbuf(branch_acl->dir_acl->dirname); catc_stringbuf(acl_filename, '/'); cat_stringbuf(acl_filename, "ACL"); - branch_acl->branch = branch; + branch_ace->branch = branch; - if (internal_read_branch_acl_file(acl_filename->buf, branch_acl) != 0) { - free(branch_acl); + if (internal_read_branch_acl_file(acl_filename->buf, branch_ace) != 0) { + free(branch_ace); return NULL; } - return branch_acl; -} + branch_ace->next = branch_acl->first_ace; + branch_acl->first_ace = branch_ace; + return branch_ace; +} int -branch_permission_granted (BRANCH_ACL *branch_acl, +branch_permission_granted (BRANCH_ACE *branch_ace, char *username, branch_permission perm) { USER_ACE *ace; /* no list of users, use default permissions */ - if (branch_acl->user_acls == NULL) + if (branch_ace->user_acls == NULL) return default_branch_perm & perm; - ace = get_user_ace(branch_acl->user_acls, username); + ace = get_user_ace(branch_ace->user_acls, username); if (ace == NULL) return 0; @@ -101,11 +128,11 @@ int -set_branch_acl (BRANCH_ACL *branch_acl, +set_branch_ace (BRANCH_ACE *branch_ace, char *username, branch_permission perm) { - branch_acl->user_acls = set_user_ace(branch_acl->user_acls, username, perm); + branch_ace->user_acls = set_user_ace(branch_ace->user_acls, username, perm); return perm; } @@ -119,7 +146,7 @@ if (strcmp(perm_str, "checkout") == 0) return branch_perm_checkout; - return -1; + return branch_perm_none; } char * @@ -146,7 +173,7 @@ p++; int -internal_read_branch_acl_file (char *filename, struct BRANCH_ACL *bacl) +internal_read_branch_acl_file (char *filename, struct BRANCH_ACE *bacl) { FILE *acl; char buf[MAX_LINE_SIZE]; @@ -222,6 +249,7 @@ struct stringbuf *tmpfilename = NULL; struct stringbuf *filename = NULL; struct stringbuf *line = NULL; + struct BRANCH_ACE *current_ace = branch_acl->first_ace; int tmpfd; int saved_len; USER_ACL *user_acl; @@ -247,27 +275,34 @@ goto out; catc_stringbuf(line, ' '); - cat_stringbuf(line, branch_acl->filename->buf); - catc_stringbuf(line, '\t'); - cat_stringbuf(line, branch_acl->branch); - catc_stringbuf(line, '\t'); - - saved_len = line->len; - user_acl = branch_acl->user_acls; - assert(user_acl != NULL); + while (current_ace != NULL) { + shrink_stringbuf(line, 1); - while (user_acl != NULL) { - cat_stringbuf(line, user_acl->username); + cat_stringbuf(line, current_ace->filename->buf); catc_stringbuf(line, '\t'); - cat_stringbuf(line, branch_permissions_string(user_acl->perm)); - catc_stringbuf(line, '\n'); - if (write(tmpfd, line->buf, line->len) != line->len) - goto out; + cat_stringbuf(line, current_ace->branch); + catc_stringbuf(line, '\t'); - shrink_stringbuf(line, saved_len); + saved_len = line->len; - user_acl = user_acl->next; + user_acl = current_ace->user_acls; + assert(user_acl != NULL); + + while (user_acl != NULL) { + cat_stringbuf(line, user_acl->username); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, branch_permissions_string(user_acl->perm)); + catc_stringbuf(line, '\n'); + if (write(tmpfd, line->buf, line->len) != line->len) + goto out; + + shrink_stringbuf(line, saved_len); + + user_acl = user_acl->next; + } + + current_ace = current_ace->next; } if (close(tmpfd) == -1) @@ -280,7 +315,8 @@ out: close(tmpfd); - unlink(tmpfilename->buf); + if (tmpfilename) + unlink(tmpfilename->buf); free_stringbuf(tmpfilename); free_stringbuf(filename); free_stringbuf(line); Index: branch-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.h,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- branch-acl.h 2001/09/08 23:09:04 1.1.2.4 +++ branch-acl.h 2001/09/09 16:59:57 1.1.2.5 @@ -23,14 +23,26 @@ #include "stringbuf.h" -struct BRANCH_ACL { +struct BRANCH_ACL; + +struct BRANCH_ACE { stringbuf *fullpath; stringbuf *filename; char *branch; - DIR_ACL *dir_acl; + struct BRANCH_ACL *acl; USER_ACL *user_acls; + struct BRANCH_ACE *next; +}; + +typedef struct BRANCH_ACE BRANCH_ACE; + +struct BRANCH_ACL { + DIR_ACL *dir_acl; + struct BRANCH_ACE *first_ace; }; +typedef struct BRANCH_ACL BRANCH_ACL; + enum { branch_perm_none = 0x00, branch_perm_checkout = 0x01, @@ -40,14 +52,15 @@ typedef int branch_permission; -typedef struct BRANCH_ACL BRANCH_ACL; +BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *branch); -BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *file, char *branch); +BRANCH_ACE *get_file_on_branch_ace (BRANCH_ACL *branch_acl, + char *branch, char *file); -int set_branch_acl (BRANCH_ACL *branch_acl, char *username, +int set_branch_ace (BRANCH_ACE *branch_ace, char *username, branch_permission perm); -int branch_permission_granted (BRANCH_ACL *branch_acl, char *username, +int branch_permission_granted (BRANCH_ACE *branch_acl, char *username, branch_permission perm); @@ -56,6 +69,6 @@ int store_branch_acl (BRANCH_ACL *branch_acl); -int internal_read_branch_acl_file (char *filename, struct BRANCH_ACL *bacl); +int internal_read_branch_acl_file (char *filename, struct BRANCH_ACE *bacl); #endif Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- check_branch_acl.c 2001/09/08 23:09:04 1.1.2.3 +++ check_branch_acl.c 2001/09/09 16:59:57 1.1.2.4 @@ -29,15 +29,14 @@ check_nonexisting_file_acl (char *top_dir) { DIR_ACL *topdir_acl; - BRANCH_ACL *foo_acl; + BRANCH_ACL *trunk_acl; /* check that ACLs don't work for non-existing file */ topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); - - foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); - assert(foo_acl == NULL); + trunk_acl = get_branch_acl(topdir_acl, "trunk"); + assert(trunk_acl != NULL); } @@ -57,52 +56,73 @@ check_existing_file_acl (char *top_dir) { DIR_ACL *topdir_acl; - BRANCH_ACL *foo_acl; + BRANCH_ACL *trunk_acl; + BRANCH_ACE *foo_ace; int new_perm; topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); - /* get default permissions for existing file */ - foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); - assert(foo_acl != NULL); - assert(foo_acl->dir_acl == topdir_acl); - assert(foo_acl->fullpath != NULL); - assert(foo_acl->filename != NULL); - assert(strcmp(foo_acl->filename->buf, "foo") == 0); - assert(foo_acl->branch != NULL); - assert(strcmp(foo_acl->branch, "trunk") == 0); + /* get list of permissions for trunk, it should be empty */ + trunk_acl = get_branch_acl(topdir_acl, "trunk"); + assert(trunk_acl != NULL); + assert(trunk_acl->dir_acl == topdir_acl); + assert(trunk_acl->first_ace == NULL); + + /* get list of permissions for file, it should be default */ + foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); + assert(foo_ace != NULL); + assert(foo_ace->branch != NULL); + assert(strcmp(foo_ace->branch, "trunk") == 0); + assert(foo_ace->acl == trunk_acl); + assert(foo_ace->fullpath != NULL); + assert(foo_ace->filename != NULL); + assert(strcmp(foo_ace->filename->buf, "foo") == 0); + assert(foo_ace->user_acls == NULL); + assert(foo_ace->next == NULL); /* default permissions allow to checkin/checkout revision on any branch */ - assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); + assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkin)); + assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); /* set only checkout permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkout); + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkout); assert(new_perm == branch_perm_checkout); - assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); + assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); - assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkin)); + assert(!branch_permission_granted(foo_ace, "vasya", branch_perm_checkin)); /* set only checkin permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkin); + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkin); assert(new_perm == branch_perm_checkin); - assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); + assert(!branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); - assert(branch_permission_granted(foo_acl, "vasya", - branch_perm_checkin)); + assert(branch_permission_granted(foo_ace, "vasya", branch_perm_checkin)); /* check that petya cannot get to file with ACLs */ - assert(!branch_permission_granted(foo_acl, "petya", branch_perm_checkout)); + assert(!branch_permission_granted(foo_ace, "petya", branch_perm_checkout)); - assert(!branch_permission_granted(foo_acl, "petya", branch_perm_checkin)); + assert(!branch_permission_granted(foo_ace, "petya", branch_perm_checkin)); + + /* set no permissions for vasya, check it */ + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_none); + assert(new_perm == branch_perm_none); + + assert(!branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); + assert(!branch_permission_granted(foo_ace, "vasya", branch_perm_checkin)); + + /* set checkout permissions again */ + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkout); + assert(new_perm == branch_perm_checkout); + /* remove vasya from file ACLs */ - new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_none); + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_none); assert (new_perm == branch_perm_none); - assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); + assert(!branch_permission_granted(foo_ace, "vasya", branch_perm_checkout)); } @@ -110,44 +130,65 @@ check_persistent_file_acl (char *top_dir) { DIR_ACL *topdir_acl; - BRANCH_ACL *foo_acl; - BRANCH_ACL *bar_acl; + BRANCH_ACL *trunk_acl; + BRANCH_ACE *foo_ace; + BRANCH_ACE *foo_ace2; + BRANCH_ACE *bar_ace; int new_perm; topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); /* get default permissions for existing file */ - foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); - assert(foo_acl != NULL); + trunk_acl = get_branch_acl(topdir_acl, "trunk"); - /* set checkout permissions for vasya and save it to disk */ - new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkout); + /* get ACE for file, causing it to be created */ + foo_ace = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); + assert(foo_ace != NULL); - new_perm = set_branch_acl(foo_acl, "petya", branch_perm_checkin); + /* set checkout permissions for vasya and save it to disk */ + new_perm = set_branch_ace(foo_ace, "vasya", branch_perm_checkout); + new_perm = set_branch_ace(foo_ace, "petya", branch_perm_checkin); - if (!store_branch_acl(foo_acl)) { + if (!store_branch_acl(trunk_acl)) { perror("Storing branch ACLs"); exit(1); } + trunk_acl = get_branch_acl (topdir_acl, "trunk"); + /* read those permissions from disk and check them */ - bar_acl = get_branch_acl(topdir_acl, "foo", "trunk"); - assert(bar_acl != NULL); + foo_ace2 = get_file_on_branch_ace(trunk_acl, "trunk", "foo"); + assert(foo_ace2 != NULL); + assert(foo_ace2->user_acls != NULL); + assert(foo_ace2->fullpath != NULL); + assert(foo_ace2->filename != NULL); + assert(strcmp(foo_ace2->filename->buf, "foo") == 0); + assert(foo_ace2->acl == trunk_acl); - assert(branch_permission_granted(bar_acl, "vasya", branch_perm_checkout)); - assert(!branch_permission_granted(bar_acl, "vasya", branch_perm_checkin)); + assert(branch_permission_granted(foo_ace2, "vasya", branch_perm_checkout)); + assert(!branch_permission_granted(foo_ace2, "vasya", branch_perm_checkin)); - assert(!branch_permission_granted(bar_acl, "petya", branch_perm_checkout)); - assert(branch_permission_granted(bar_acl, "petya", branch_perm_checkin)); + assert(!branch_permission_granted(foo_ace2, "petya", branch_perm_checkout)); + assert(branch_permission_granted(foo_ace2, "petya", branch_perm_checkin)); + + /* check that permissions for another file have not changed and + are, in fact, default ones */ + bar_ace = get_file_on_branch_ace(trunk_acl, "trunk", "bar"); + assert(bar_ace != NULL); + + assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkout)); + assert(branch_permission_granted(bar_ace, "vasya", branch_perm_checkin)); + assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkout)); + assert(branch_permission_granted(bar_ace, "petya", branch_perm_checkin)); } void check_parsing_branch_permissions (void) { - assert(parse_branch_permissions("invalid") == -1); + assert(parse_branch_permissions("invalid") == branch_perm_none); assert(parse_branch_permissions("checkin") == branch_perm_checkin); |
From: Alexey M. <ty...@us...> - 2001-09-08 23:09:07
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv28554 Modified Files: Tag: NCLI-1-11-1 branch-acl.c branch-acl.h check_acl.c check_acl.h check_branch_acl.c Log Message: Saving branch-level ACLs for a single file works now Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- branch-acl.c 2001/08/29 21:17:16 1.1.2.3 +++ branch-acl.c 2001/09/08 23:09:04 1.1.2.4 @@ -21,7 +21,9 @@ #include "branch-acl.h" #include <assert.h> +#include <errno.h> #include <fcntl.h> +#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> @@ -29,36 +31,51 @@ #include <unistd.h> #endif - BRANCH_ACL * get_branch_acl (DIR_ACL *dir_acl, char *filename, char *branch) { BRANCH_ACL * branch_acl; struct stat stat_buf; + struct stringbuf *acl_filename; - branch_acl = (BRANCH_ACL*) malloc(sizeof(struct BRANCH_ACL)); + branch_acl = (BRANCH_ACL*) calloc(1, sizeof(struct BRANCH_ACL)); if (branch_acl == NULL) return NULL; - branch_acl->filename = dup_stringbuf(dir_acl->dirname); + branch_acl->filename = new_stringbuf(filename); if (branch_acl->filename == NULL) { free(branch_acl); return NULL; } - catc_stringbuf(branch_acl->filename, '/'); - cat_stringbuf(branch_acl->filename, filename); + branch_acl->fullpath = dup_stringbuf(dir_acl->dirname); + if (branch_acl->fullpath == NULL) { + free(branch_acl); + return NULL; + } - if (stat(branch_acl->filename->buf, &stat_buf) == -1) { + catc_stringbuf(branch_acl->fullpath, '/'); + cat_stringbuf(branch_acl->fullpath, filename); + + if (stat(branch_acl->fullpath->buf, &stat_buf) == -1) { + free(branch_acl); return NULL; } branch_acl->dir_acl = dir_acl; - branch_acl->user_acls = NULL; + /* try to open ACL file, if it exists */ + acl_filename = dup_stringbuf(dir_acl->dirname); + catc_stringbuf(acl_filename, '/'); + cat_stringbuf(acl_filename, "ACL"); branch_acl->branch = branch; + if (internal_read_branch_acl_file(acl_filename->buf, branch_acl) != 0) { + free(branch_acl); + return NULL; + } + return branch_acl; } @@ -72,7 +89,7 @@ /* no list of users, use default permissions */ if (branch_acl->user_acls == NULL) - return default_branch_perm && perm; + return default_branch_perm & perm; ace = get_user_ace(branch_acl->user_acls, username); @@ -94,32 +111,140 @@ } int +parse_branch_permissions (char *perm_str) +{ + if (strcmp(perm_str, "checkin") == 0) + return branch_perm_checkin; + + if (strcmp(perm_str, "checkout") == 0) + return branch_perm_checkout; + + return -1; +} + +char * +branch_permissions_string (int perm) +{ + if (perm == branch_perm_checkin) + return "checkin"; + + if (perm == branch_perm_checkout) + return "checkout"; + + return "invalid"; +} + +#define MAX_LINE_SIZE 128 + +#define EXTRACT_NEXT_LINE(c) \ + while (*p && (*p != '\t')) \ + p++; \ + \ + if (*p == c) \ + return lineno; \ + *p = '\0'; \ + p++; + +int +internal_read_branch_acl_file (char *filename, struct BRANCH_ACL *bacl) +{ + FILE *acl; + char buf[MAX_LINE_SIZE]; + char *p; + int lineno = 1; + + acl = fopen(filename, "r"); + if (acl == NULL) { + if (errno == ENOENT) + return 0; + else + return -1; + } + + while ((p = fgets(buf, MAX_LINE_SIZE, acl)) != NULL) { + int len = strlen(buf); + char initial_char; + char *filename; + char *branch; + char *username; + char *rights; + int perm; + + if (buf[len - 1] != '\n') + return lineno; + + buf[len - 1] = '\0'; + + initial_char = *p++; + if (initial_char != ' ') + continue; + + filename = p; + EXTRACT_NEXT_LINE('\0'); + if (bacl && (strcmp(bacl->filename->buf, filename) != 0)) + continue; + + branch = p; + EXTRACT_NEXT_LINE('\0'); + if (bacl && (strcmp(bacl->branch, branch) != 0)) + continue; + + username = p; + EXTRACT_NEXT_LINE('\0'); + rights = p; + EXTRACT_NEXT_LINE('\t'); + perm = parse_branch_permissions(rights); + + if (bacl) { + struct USER_ACL *new_acl = set_user_ace(bacl->user_acls, username, perm); + if (new_acl == NULL) { + fclose(acl); + return -1; + } + bacl->user_acls = new_acl; + } + + lineno++; + } + + if (!feof(acl)) + return -1; + + if (fclose(acl) == EOF) + return -1; + + return 0; +} + +int store_branch_acl (BRANCH_ACL *branch_acl) { - struct stringbuf *tmpfilename; - struct stringbuf *line; + struct stringbuf *tmpfilename = NULL; + struct stringbuf *filename = NULL; + struct stringbuf *line = NULL; int tmpfd; int saved_len; USER_ACL *user_acl; + int retval = 0; tmpfilename = dup_stringbuf(branch_acl->dir_acl->dirname); if (tmpfilename == NULL) - return 0; + goto out; cat_stringbuf(tmpfilename, "/ACL.tmp"); + filename = dup_stringbuf(tmpfilename); + if (filename == NULL) + goto out; + shrink_stringbuf(filename, filename->len - strlen(".tmp")); + line = new_stringbuf(""); - if (line == NULL) { - free_stringbuf(tmpfilename); - return 0; - } + if (line == NULL) + goto out; tmpfd = open(tmpfilename->buf, O_CREAT | O_EXCL | O_WRONLY, 0600); - if (tmpfd == -1) { - free_stringbuf(tmpfilename); - free_stringbuf(line); - return 0; - } + if (tmpfd == -1) + goto out; catc_stringbuf(line, ' '); cat_stringbuf(line, branch_acl->filename->buf); @@ -135,12 +260,10 @@ while (user_acl != NULL) { cat_stringbuf(line, user_acl->username); catc_stringbuf(line, '\t'); - cat_stringbuf(line, "rights"); + cat_stringbuf(line, branch_permissions_string(user_acl->perm)); catc_stringbuf(line, '\n'); - if (write(tmpfd, line->buf, line->len) != line->len) { - close(tmpfd); - return 0; - } + if (write(tmpfd, line->buf, line->len) != line->len) + goto out; shrink_stringbuf(line, saved_len); @@ -148,7 +271,18 @@ } if (close(tmpfd) == -1) - return 0; + goto out; - return 1; + if (rename(tmpfilename->buf, filename->buf) == -1) + goto out; + + retval = 1; + + out: + close(tmpfd); + unlink(tmpfilename->buf); + free_stringbuf(tmpfilename); + free_stringbuf(filename); + free_stringbuf(line); + return retval; } Index: branch-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- branch-acl.h 2001/08/29 21:17:16 1.1.2.3 +++ branch-acl.h 2001/09/08 23:09:04 1.1.2.4 @@ -24,6 +24,7 @@ #include "stringbuf.h" struct BRANCH_ACL { + stringbuf *fullpath; stringbuf *filename; char *branch; DIR_ACL *dir_acl; @@ -50,6 +51,11 @@ branch_permission perm); +int parse_branch_permissions (char *perm_str); +char *branch_permissions_string (int perm); + int store_branch_acl (BRANCH_ACL *branch_acl); + +int internal_read_branch_acl_file (char *filename, struct BRANCH_ACL *bacl); #endif Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- check_acl.c 2001/08/29 21:17:16 1.1.2.4 +++ check_acl.c 2001/09/08 23:09:04 1.1.2.5 @@ -59,6 +59,10 @@ check_existing_file_acl(top_dir); + check_parsing_branch_permissions(); + + check_reading_acl_file(); + check_persistent_file_acl(top_dir); exit (0); Index: check_acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_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 --- check_acl.h 2001/08/29 21:17:16 1.1.2.2 +++ check_acl.h 2001/09/08 23:09:04 1.1.2.3 @@ -24,6 +24,9 @@ void check_nonexisting_file_acl (char *top_dir); void check_existing_file_acl (char *top_dir); +void check_parsing_branch_permissions (void); + +void check_reading_acl_file (void); void check_persistent_file_acl (char *top_dir); #endif /* CHECK_ACL_H */ Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- check_branch_acl.c 2001/08/29 21:17:16 1.1.2.2 +++ check_branch_acl.c 2001/09/08 23:09:04 1.1.2.3 @@ -20,6 +20,7 @@ #include "dir-acl.h" #include <assert.h> +#include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -41,6 +42,18 @@ void +check_reading_acl_file (void) +{ + assert(internal_read_branch_acl_file("./test-acl-non-existent.txt", NULL) == 0); + + assert((internal_read_branch_acl_file("./test-acl-non-readable.txt", NULL) == -1) && (errno == EACCES)); + + assert(internal_read_branch_acl_file("./test-acl-too-few.txt", NULL) == 1); + assert(internal_read_branch_acl_file("./test-acl-too-many.txt", NULL) == 1); +} + + +void check_existing_file_acl (char *top_dir) { DIR_ACL *topdir_acl; @@ -54,6 +67,11 @@ foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); assert(foo_acl != NULL); assert(foo_acl->dir_acl == topdir_acl); + assert(foo_acl->fullpath != NULL); + assert(foo_acl->filename != NULL); + assert(strcmp(foo_acl->filename->buf, "foo") == 0); + assert(foo_acl->branch != NULL); + assert(strcmp(foo_acl->branch, "trunk") == 0); /* default permissions allow to checkin/checkout revision on any branch */ assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); @@ -93,6 +111,7 @@ { DIR_ACL *topdir_acl; BRANCH_ACL *foo_acl; + BRANCH_ACL *bar_acl; int new_perm; topdir_acl = start_acl_traverse(top_dir); @@ -108,7 +127,34 @@ new_perm = set_branch_acl(foo_acl, "petya", branch_perm_checkin); if (!store_branch_acl(foo_acl)) { - perror("Storing branch ACLs failed"); + perror("Storing branch ACLs"); exit(1); } + + /* read those permissions from disk and check them */ + bar_acl = get_branch_acl(topdir_acl, "foo", "trunk"); + assert(bar_acl != NULL); + + assert(branch_permission_granted(bar_acl, "vasya", branch_perm_checkout)); + assert(!branch_permission_granted(bar_acl, "vasya", branch_perm_checkin)); + + assert(!branch_permission_granted(bar_acl, "petya", branch_perm_checkout)); + assert(branch_permission_granted(bar_acl, "petya", branch_perm_checkin)); + +} + + +void +check_parsing_branch_permissions (void) +{ + assert(parse_branch_permissions("invalid") == -1); + + assert(parse_branch_permissions("checkin") == branch_perm_checkin); + + assert(parse_branch_permissions("checkout") == branch_perm_checkout); + + assert(strcmp(branch_permissions_string(branch_perm_checkin), "checkin") == 0); + + assert(strcmp(branch_permissions_string(branch_perm_checkout), "checkout") == 0); + } |
From: Alexey M. <ty...@us...> - 2001-09-08 23:07:39
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv28158 Modified Files: Tag: NCLI-1-11-1 .cvsignore Makefile.am Makefile.in Added Files: Tag: NCLI-1-11-1 check_acl.sh Log Message: Use wrapper script instead of checking program --- NEW FILE: check_acl.sh --- #! /bin/bash touch ./test-acl-non-readable.txt chmod 000 ./test-acl-non-readable.txt echo -e " file.c\tbranch" > ./test-acl-too-few.txt echo -e " file.c\tbranch\tuser\trights\tfoo\tbar" > ./test-acl-too-many.txt if ./check_acl; then rm -f ./test-acl-*.txt else exit $? fi Index: .cvsignore =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/.cvsignore,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- .cvsignore 2001/08/29 19:57:57 1.1.2.1 +++ .cvsignore 2001/09/08 23:07:37 1.1.2.2 @@ -3,4 +3,4 @@ check_stringbuf check_user_acl check_acl - +test-*.txt Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- Makefile.am 2001/08/29 19:58:45 1.1.2.2 +++ Makefile.am 2001/09/08 23:07:37 1.1.2.3 @@ -1,9 +1,11 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = cleanup.sh check_stringbuf check_user_acl check_acl +TESTS = cleanup.sh check_stringbuf check_user_acl check_acl.sh noinst_PROGRAMS = check_stringbuf check_user_acl check_acl +noinst_SCRIPTS = cleanup.sh check_acl.sh + check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c check_acl_SOURCES = \ @@ -18,3 +20,4 @@ check_user_acl_SOURCES = \ check_user_acl.c \ user-acl.h user-acl.c + Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- Makefile.in 2001/08/29 19:58:45 1.1.2.2 +++ Makefile.in 2001/09/08 23:07:37 1.1.2.3 @@ -86,10 +86,12 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = cleanup.sh check_stringbuf check_user_acl check_acl +TESTS = cleanup.sh check_stringbuf check_user_acl check_acl.sh noinst_PROGRAMS = check_stringbuf check_user_acl check_acl +noinst_SCRIPTS = cleanup.sh check_acl.sh + check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c check_acl_SOURCES = \ @@ -135,6 +137,8 @@ check_user_acl_LDADD = $(LDADD) check_user_acl_DEPENDENCIES = check_user_acl_LDFLAGS = +SCRIPTS = $(noinst_SCRIPTS) + DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src @@ -357,7 +361,7 @@ check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am -all-am: Makefile $(PROGRAMS) +all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: |
From: Alexey M. <ty...@us...> - 2001-09-08 23:04:40
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv27392 Modified Files: Tag: NCLI-1-11-1 check_user_acl.c user-acl.c Log Message: Make our own copy of username Index: check_user_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_user_acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_user_acl.c 2001/08/29 17:28:11 1.1.2.1 +++ check_user_acl.c 2001/09/08 23:04:36 1.1.2.2 @@ -7,6 +7,7 @@ int main (void) { + char ann[] = "ann"; USER_ACL *user_acl = NULL; USER_ACE *user_ace; @@ -16,10 +17,12 @@ assert(user_ace == NULL); /* set permissions for user */ - user_acl = set_user_ace (NULL, "ann", 10); + user_acl = set_user_ace (NULL, ann, 10); assert(user_acl != NULL); + strcpy(ann, "xxx"); - /* check that they are the same as were set */ + /* check that they are the same as were set, even if the original + username gets overwritten */ user_ace = get_user_ace (user_acl, "ann"); assert(user_ace != NULL); assert(user_ace->perm == 10); Index: user-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/user-acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- user-acl.c 2001/08/29 19:56:54 1.1.2.2 +++ user-acl.c 2001/09/08 23:04:36 1.1.2.3 @@ -15,12 +15,14 @@ */ +#define _BSD_SOURCE 1 #include "config.h" #include "user-acl.h" #include <stdlib.h> +#include <string.h> USER_ACE * get_user_ace (USER_ACL *acls, char *username) @@ -49,11 +51,15 @@ acl = acl->next; } - acl = (USER_ACL *) malloc(sizeof(USER_ACE)); + acl = (USER_ACL *) calloc(1, sizeof(USER_ACE)); if (acl == NULL) return NULL; - acl->username = username; + acl->username = strdup(username); + if (acl->username == NULL) { + free(acl); + return NULL; + } acl->perm = perm; acl->next = acls; |
From: Alexey M. <ty...@us...> - 2001-08-29 21:17:19
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv19113 Modified Files: Tag: NCLI-1-11-1 branch-acl.c branch-acl.h check_acl.c check_acl.h check_branch_acl.c Log Message: Mostly implemented storing branch-level ACLs on disk Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- branch-acl.c 2001/08/29 19:56:54 1.1.2.2 +++ branch-acl.c 2001/08/29 21:17:16 1.1.2.3 @@ -20,16 +20,18 @@ #include "branch-acl.h" +#include <assert.h> +#include <fcntl.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H -#include "unistd.h" +#include <unistd.h> #endif BRANCH_ACL * -get_branch_acl (DIR_ACL *dir_acl, char *filename) +get_branch_acl (DIR_ACL *dir_acl, char *filename, char *branch) { BRANCH_ACL * branch_acl; struct stat stat_buf; @@ -55,13 +57,14 @@ branch_acl->user_acls = NULL; + branch_acl->branch = branch; + return branch_acl; } int branch_permission_granted (BRANCH_ACL *branch_acl, - char *branch, char *username, branch_permission perm) { @@ -82,12 +85,70 @@ int set_branch_acl (BRANCH_ACL *branch_acl, - char *branch, char *username, branch_permission perm) { - branch_acl->user_acls = set_user_ace(branch_acl->user_acls, username, perm); return perm; +} + +int +store_branch_acl (BRANCH_ACL *branch_acl) +{ + struct stringbuf *tmpfilename; + struct stringbuf *line; + int tmpfd; + int saved_len; + USER_ACL *user_acl; + + tmpfilename = dup_stringbuf(branch_acl->dir_acl->dirname); + if (tmpfilename == NULL) + return 0; + + cat_stringbuf(tmpfilename, "/ACL.tmp"); + + line = new_stringbuf(""); + if (line == NULL) { + free_stringbuf(tmpfilename); + return 0; + } + + tmpfd = open(tmpfilename->buf, O_CREAT | O_EXCL | O_WRONLY, 0600); + if (tmpfd == -1) { + free_stringbuf(tmpfilename); + free_stringbuf(line); + return 0; + } + + catc_stringbuf(line, ' '); + cat_stringbuf(line, branch_acl->filename->buf); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, branch_acl->branch); + catc_stringbuf(line, '\t'); + + saved_len = line->len; + + user_acl = branch_acl->user_acls; + assert(user_acl != NULL); + + while (user_acl != NULL) { + cat_stringbuf(line, user_acl->username); + catc_stringbuf(line, '\t'); + cat_stringbuf(line, "rights"); + catc_stringbuf(line, '\n'); + if (write(tmpfd, line->buf, line->len) != line->len) { + close(tmpfd); + return 0; + } + + shrink_stringbuf(line, saved_len); + + user_acl = user_acl->next; + } + + if (close(tmpfd) == -1) + return 0; + + return 1; } Index: branch-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-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 --- branch-acl.h 2001/08/29 19:56:54 1.1.2.2 +++ branch-acl.h 2001/08/29 21:17:16 1.1.2.3 @@ -25,6 +25,7 @@ struct BRANCH_ACL { stringbuf *filename; + char *branch; DIR_ACL *dir_acl; USER_ACL *user_acls; }; @@ -40,13 +41,15 @@ typedef struct BRANCH_ACL BRANCH_ACL; -BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *file); +BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *file, char *branch); -int set_branch_acl (BRANCH_ACL *file_acl, char *branch, char *username, +int set_branch_acl (BRANCH_ACL *branch_acl, char *username, branch_permission perm); -int branch_permission_granted (BRANCH_ACL *file_acl, char *branch, char *username, +int branch_permission_granted (BRANCH_ACL *branch_acl, char *username, branch_permission perm); + +int store_branch_acl (BRANCH_ACL *branch_acl); #endif Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- check_acl.c 2001/08/29 19:58:45 1.1.2.3 +++ check_acl.c 2001/08/29 21:17:16 1.1.2.4 @@ -59,5 +59,7 @@ check_existing_file_acl(top_dir); + check_persistent_file_acl(top_dir); + exit (0); } Index: check_acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_acl.h 2001/08/29 19:58:45 1.1.2.1 +++ check_acl.h 2001/08/29 21:17:16 1.1.2.2 @@ -24,4 +24,6 @@ void check_nonexisting_file_acl (char *top_dir); void check_existing_file_acl (char *top_dir); +void check_persistent_file_acl (char *top_dir); + #endif /* CHECK_ACL_H */ Index: check_branch_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_branch_acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_branch_acl.c 2001/08/29 19:58:45 1.1.2.1 +++ check_branch_acl.c 2001/08/29 21:17:16 1.1.2.2 @@ -20,6 +20,7 @@ #include "dir-acl.h" #include <assert.h> +#include <stdio.h> #include <stdlib.h> @@ -33,7 +34,7 @@ topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); - foo_acl = get_branch_acl(topdir_acl, "foo"); + foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); assert(foo_acl == NULL); } @@ -50,46 +51,64 @@ assert(topdir_acl != NULL); /* get default permissions for existing file */ - foo_acl = get_branch_acl(topdir_acl, "foo"); + foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); assert(foo_acl != NULL); assert(foo_acl->dir_acl == topdir_acl); /* default permissions allow to checkin/checkout revision on any branch */ - assert(branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); + assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); /* set only checkout permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkout); + new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkout); assert(new_perm == branch_perm_checkout); - assert(branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); + assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); - assert(!branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkin)); + assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkin)); /* set only checkin permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkin); + new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkin); assert(new_perm == branch_perm_checkin); - assert(!branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); + assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); - assert(branch_permission_granted(foo_acl, "trunk", "vasya", + assert(branch_permission_granted(foo_acl, "vasya", branch_perm_checkin)); /* check that petya cannot get to file with ACLs */ - assert(!branch_permission_granted(foo_acl, "trunk", "petya", - branch_perm_checkout)); + assert(!branch_permission_granted(foo_acl, "petya", branch_perm_checkout)); - assert(!branch_permission_granted(foo_acl, "trunk", "petya", - branch_perm_checkin)); + assert(!branch_permission_granted(foo_acl, "petya", branch_perm_checkin)); /* remove vasya from file ACLs */ - new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_none); + new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_none); assert (new_perm == branch_perm_none); - assert(!branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); + assert(!branch_permission_granted(foo_acl, "vasya", branch_perm_checkout)); +} + +void +check_persistent_file_acl (char *top_dir) +{ + DIR_ACL *topdir_acl; + BRANCH_ACL *foo_acl; + int new_perm; + + topdir_acl = start_acl_traverse(top_dir); + assert(topdir_acl != NULL); + + /* get default permissions for existing file */ + foo_acl = get_branch_acl(topdir_acl, "foo", "trunk"); + assert(foo_acl != NULL); + + /* set checkout permissions for vasya and save it to disk */ + new_perm = set_branch_acl(foo_acl, "vasya", branch_perm_checkout); + + new_perm = set_branch_acl(foo_acl, "petya", branch_perm_checkin); + + if (!store_branch_acl(foo_acl)) { + perror("Storing branch ACLs failed"); + exit(1); + } } |
From: Alexey M. <ty...@us...> - 2001-08-29 21:16:37
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv18448 Modified Files: Tag: NCLI-1-11-1 stringbuf.c stringbuf.h check_stringbuf.c Log Message: fixed bug in cat_stringbuf() that was causing segfaults in other tests; implemented shrink_stringbuf() Index: stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/stringbuf.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- stringbuf.c 2001/08/29 19:56:54 1.1.2.2 +++ stringbuf.c 2001/08/29 21:16:34 1.1.2.3 @@ -111,7 +111,7 @@ return buf; if (buf->len + len > buf->allocated) { - int needs_to_allocate = buf->allocated + buf->len * 2; + int needs_to_allocate = buf->allocated + len * 2; char *tmp = (char *) realloc(buf->buf, needs_to_allocate); if (tmp == NULL) return NULL; @@ -125,3 +125,16 @@ return buf; } + +struct stringbuf * +shrink_stringbuf (struct stringbuf *buf, int newlen) +{ + + if (newlen > buf->len) + return NULL; + + buf->len = newlen; + buf->buf[buf->len] = '\0'; + + return buf; +} Index: stringbuf.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/stringbuf.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- stringbuf.h 2001/08/29 17:29:46 1.1.2.1 +++ stringbuf.h 2001/08/29 21:16:34 1.1.2.2 @@ -20,5 +20,7 @@ struct stringbuf *cat_stringbuf (struct stringbuf *buf, char *str); +struct stringbuf *shrink_stringbuf (struct stringbuf *buf, int newlen); + #endif /* STRINGBUF_H */ Index: check_stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_stringbuf.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_stringbuf.c 2001/08/29 17:29:46 1.1.2.1 +++ check_stringbuf.c 2001/08/29 21:16:34 1.1.2.2 @@ -56,15 +56,15 @@ static void test_stringbuf (void) { - /* check creating new stringbuf */ struct stringbuf *buf; struct stringbuf *buf2; + /* check creating new stringbuf */ buf = new_stringbuf("foo"); assert(buf->buf != NULL); assert(strlen(buf->buf) == buf->len); - assert(buf->allocated >= buf->len); + assert(buf->allocated > buf->len); assert(strcmp(buf->buf, "foo") == 0); /* check duplicating stringbuf */ @@ -179,6 +179,26 @@ assert(free_stringbuf(buf)); } +static void +test_shrink_stringbuf (void) +{ + struct stringbuf *buf; + struct stringbuf *tmp; + + buf = new_stringbuf("foobar"); + assert(buf != NULL); + + /* cannot shrink to larger size */ + tmp = shrink_stringbuf(buf, 100); + assert(tmp == NULL); + + tmp = shrink_stringbuf(buf, 3); + assert(tmp == buf); + assert(buf->len == 3); + assert(strcmp(buf->buf, "foo") == 0); +} + + int main(void) { @@ -191,6 +211,8 @@ test_catc_stringbuf(); test_cat_stringbuf(); + + test_shrink_stringbuf(); exit(0); } |
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv11277 Modified Files: Tag: NCLI-1-11-1 Makefile.am Makefile.in check_acl.c Added Files: Tag: NCLI-1-11-1 check_acl.h check_branch_acl.c check_dir_acl.c Log Message: Distribute test-suites between two more files --- NEW FILE: check_acl.h --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Test-suite for Access Control Lists */ #ifndef CHECK_ACL_H #define CHECK_ACL_H 1 void check_nonexisting_dir_acl(char *top_dir); void check_existing_dir_acl(char *top_dir); void check_nonexisting_file_acl (char *top_dir); void check_existing_file_acl (char *top_dir); #endif /* CHECK_ACL_H */ --- NEW FILE: check_branch_acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Test-suite for branch-level Access Control Lists */ #include "branch-acl.h" #include "check_acl.h" #include "dir-acl.h" #include <assert.h> #include <stdlib.h> void check_nonexisting_file_acl (char *top_dir) { DIR_ACL *topdir_acl; BRANCH_ACL *foo_acl; /* check that ACLs don't work for non-existing file */ topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); foo_acl = get_branch_acl(topdir_acl, "foo"); assert(foo_acl == NULL); } void check_existing_file_acl (char *top_dir) { DIR_ACL *topdir_acl; BRANCH_ACL *foo_acl; int new_perm; topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); /* get default permissions for existing file */ foo_acl = get_branch_acl(topdir_acl, "foo"); assert(foo_acl != NULL); assert(foo_acl->dir_acl == topdir_acl); /* default permissions allow to checkin/checkout revision on any branch */ assert(branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkout)); /* set only checkout permissions for vasya, check it */ new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkout); assert(new_perm == branch_perm_checkout); assert(branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkout)); assert(!branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkin)); /* set only checkin permissions for vasya, check it */ new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkin); assert(new_perm == branch_perm_checkin); assert(!branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkout)); assert(branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkin)); /* check that petya cannot get to file with ACLs */ assert(!branch_permission_granted(foo_acl, "trunk", "petya", branch_perm_checkout)); assert(!branch_permission_granted(foo_acl, "trunk", "petya", branch_perm_checkin)); /* remove vasya from file ACLs */ new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_none); assert (new_perm == branch_perm_none); assert(!branch_permission_granted(foo_acl, "trunk", "vasya", branch_perm_checkout)); } --- NEW FILE: check_dir_acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Test-suite for directory-level Access Control Lists */ #include "check_acl.h" #include "dir-acl.h" #include <assert.h> #include <errno.h> #include <stdlib.h> void check_nonexisting_dir_acl (char *top_dir) { DIR_ACL *topdir_acl; /* check that ACLs don't work for non-existing directory */ topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl == NULL); assert(errno == ENOENT); } void check_existing_dir_acl (char *top_dir) { /* check that ACLs get created for existing directory */ DIR_ACL *topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); } Index: Makefile.am =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.am,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- Makefile.am 2001/08/26 20:43:33 1.1.2.1 +++ Makefile.am 2001/08/29 19:58:45 1.1.2.2 @@ -1,7 +1,20 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = check_acl +TESTS = cleanup.sh check_stringbuf check_user_acl check_acl -noinst_PROGRAMS = check_acl +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl -check_acl_SOURCES = check_acl.c acl.h acl.c +check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c + +check_acl_SOURCES = \ + check_acl.h check_acl.c \ + check_branch_acl.c check_dir_acl.c \ + branch-acl.h branch-acl.c \ + dir-acl.h dir-acl.c \ + stringbuf.h stringbuf.c \ + user-acl.h user-acl.c + + +check_user_acl_SOURCES = \ + check_user_acl.c \ + user-acl.h user-acl.c Index: Makefile.in =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/Makefile.in,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- Makefile.in 2001/08/26 20:43:33 1.1.2.1 +++ Makefile.in 2001/08/29 19:58:45 1.1.2.2 @@ -86,25 +86,55 @@ AUTOMAKE_OPTIONS = ../lib/ansi2knr -TESTS = check_acl +TESTS = cleanup.sh check_stringbuf check_user_acl check_acl -noinst_PROGRAMS = check_acl +noinst_PROGRAMS = check_stringbuf check_user_acl check_acl -check_acl_SOURCES = check_acl.c acl.h acl.c +check_stringbuf_SOURCES = check_stringbuf.c stringbuf.h stringbuf.c + +check_acl_SOURCES = \ + check_acl.h check_acl.c \ + check_branch_acl.c check_dir_acl.c \ + branch-acl.h branch-acl.c \ + dir-acl.h dir-acl.c \ + stringbuf.h stringbuf.c \ + user-acl.h user-acl.c + + +check_user_acl_SOURCES = \ + check_user_acl.c \ + user-acl.h user-acl.c + EXEEXT = OBJEXT = o subdir = acl mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h CONFIG_CLEAN_FILES = -noinst_PROGRAMS = check_acl$(EXEEXT) +noinst_PROGRAMS = check_stringbuf$(EXEEXT) check_user_acl$(EXEEXT) \ + check_acl$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) -am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) acl$U.$(OBJEXT) +am_check_acl_OBJECTS = check_acl$U.$(OBJEXT) \ + check_branch_acl$U.$(OBJEXT) check_dir_acl$U.$(OBJEXT) \ + branch-acl$U.$(OBJEXT) dir-acl$U.$(OBJEXT) \ + stringbuf$U.$(OBJEXT) user-acl$U.$(OBJEXT) check_acl_OBJECTS = $(am_check_acl_OBJECTS) check_acl_LDADD = $(LDADD) check_acl_DEPENDENCIES = check_acl_LDFLAGS = +am_check_stringbuf_OBJECTS = check_stringbuf$U.$(OBJEXT) \ + stringbuf$U.$(OBJEXT) +check_stringbuf_OBJECTS = $(am_check_stringbuf_OBJECTS) +check_stringbuf_LDADD = $(LDADD) +check_stringbuf_DEPENDENCIES = +check_stringbuf_LDFLAGS = +am_check_user_acl_OBJECTS = check_user_acl$U.$(OBJEXT) \ + user-acl$U.$(OBJEXT) +check_user_acl_OBJECTS = $(am_check_user_acl_OBJECTS) +check_user_acl_LDADD = $(LDADD) +check_user_acl_DEPENDENCIES = +check_user_acl_LDFLAGS = DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src @@ -112,15 +142,23 @@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp -@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/acl$U.Po $(DEPDIR)/check_acl$U.Po +@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/branch-acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_branch_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_dir_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_stringbuf$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/check_user_acl$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/dir-acl$U.Po $(DEPDIR)/stringbuf$U.Po \ +@AMDEP_TRUE@ $(DEPDIR)/user-acl$U.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ -DIST_SOURCES = $(check_acl_SOURCES) +DIST_SOURCES = $(check_acl_SOURCES) $(check_stringbuf_SOURCES) \ + $(check_user_acl_SOURCES) DIST_COMMON = Makefile.am Makefile.in -SOURCES = $(check_acl_SOURCES) +SOURCES = $(check_acl_SOURCES) $(check_stringbuf_SOURCES) $(check_user_acl_SOURCES) all: all-am @@ -139,6 +177,12 @@ check_acl$(EXEEXT): $(check_acl_OBJECTS) $(check_acl_DEPENDENCIES) @rm -f check_acl$(EXEEXT) $(LINK) $(check_acl_LDFLAGS) $(check_acl_OBJECTS) $(check_acl_LDADD) $(LIBS) +check_stringbuf$(EXEEXT): $(check_stringbuf_OBJECTS) $(check_stringbuf_DEPENDENCIES) + @rm -f check_stringbuf$(EXEEXT) + $(LINK) $(check_stringbuf_LDFLAGS) $(check_stringbuf_OBJECTS) $(check_stringbuf_LDADD) $(LIBS) +check_user_acl$(EXEEXT): $(check_user_acl_OBJECTS) $(check_user_acl_DEPENDENCIES) + @rm -f check_user_acl$(EXEEXT) + $(LINK) $(check_user_acl_LDFLAGS) $(check_user_acl_OBJECTS) $(check_user_acl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core @@ -153,8 +197,15 @@ mostlyclean-kr: -rm -f *_.c -@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/branch-acl$U.Po@_am_quote@ @AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_branch_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_dir_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_stringbuf$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/check_user_acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/dir-acl$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/stringbuf$U.Po@_am_quote@ +@AMDEP_TRUE@@_am_include@ @_am_quote@$(DEPDIR)/user-acl$U.Po@_am_quote@ distclean-depend: -rm -rf $(DEPDIR) @@ -171,11 +222,28 @@ @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(COMPILE) -c `cygpath -w $<` CCDEPMODE = @CCDEPMODE@ -acl_.c: acl.c $(ANSI2KNR) - $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/acl.c; then echo $(srcdir)/acl.c; else echo acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > acl_.c || rm -f acl_.c +branch-acl_.c: branch-acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/branch-acl.c; then echo $(srcdir)/branch-acl.c; else echo branch-acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > branch-acl_.c || rm -f branch-acl_.c check_acl_.c: check_acl.c $(ANSI2KNR) $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_acl.c; then echo $(srcdir)/check_acl.c; else echo check_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_acl_.c || rm -f check_acl_.c -acl_.$(OBJEXT) check_acl_.$(OBJEXT) : $(ANSI2KNR) +check_branch_acl_.c: check_branch_acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_branch_acl.c; then echo $(srcdir)/check_branch_acl.c; else echo check_branch_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_branch_acl_.c || rm -f check_branch_acl_.c +check_dir_acl_.c: check_dir_acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_dir_acl.c; then echo $(srcdir)/check_dir_acl.c; else echo check_dir_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_dir_acl_.c || rm -f check_dir_acl_.c +check_stringbuf_.c: check_stringbuf.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_stringbuf.c; then echo $(srcdir)/check_stringbuf.c; else echo check_stringbuf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_stringbuf_.c || rm -f check_stringbuf_.c +check_user_acl_.c: check_user_acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/check_user_acl.c; then echo $(srcdir)/check_user_acl.c; else echo check_user_acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > check_user_acl_.c || rm -f check_user_acl_.c +dir-acl_.c: dir-acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dir-acl.c; then echo $(srcdir)/dir-acl.c; else echo dir-acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dir-acl_.c || rm -f dir-acl_.c +stringbuf_.c: stringbuf.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stringbuf.c; then echo $(srcdir)/stringbuf.c; else echo stringbuf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stringbuf_.c || rm -f stringbuf_.c +user-acl_.c: user-acl.c $(ANSI2KNR) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/user-acl.c; then echo $(srcdir)/user-acl.c; else echo user-acl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > user-acl_.c || rm -f user-acl_.c +branch-acl_.$(OBJEXT) check_acl_.$(OBJEXT) check_branch_acl_.$(OBJEXT) \ +check_dir_acl_.$(OBJEXT) check_stringbuf_.$(OBJEXT) \ +check_user_acl_.$(OBJEXT) dir-acl_.$(OBJEXT) stringbuf_.$(OBJEXT) \ +user-acl_.$(OBJEXT) : $(ANSI2KNR) uninstall-info-am: tags: TAGS Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- check_acl.c 2001/08/29 17:31:38 1.1.2.2 +++ check_acl.c 2001/08/29 19:58:45 1.1.2.3 @@ -15,8 +15,8 @@ */ - #include "branch-acl.h" +#include "check_acl.h" #include <assert.h> #include <errno.h> @@ -34,31 +34,18 @@ { char *top_dir = TOP_CHECK_DIR; int fd; - int new_perm; - - DIR_ACL *topdir_acl; - BRANCH_ACL *foo_acl; - - /* check that ACLs don't work for non-existing directory */ - topdir_acl = start_acl_traverse(top_dir); - assert(topdir_acl == NULL); - assert(errno == ENOENT); + check_nonexisting_dir_acl(top_dir); /* create that directory */ if (mkdir(TOP_CHECK_DIR, 0755) == -1) { perror("check_acl"); exit (1); } - - /* check that ACLs get created for existing directory */ - topdir_acl = start_acl_traverse(top_dir); - assert(topdir_acl != NULL); - /* check that ACLs don't work for non-existing file */ - foo_acl = get_branch_acl(topdir_acl, "foo"); + check_existing_dir_acl(top_dir); - assert(foo_acl == NULL); + check_nonexisting_file_acl(top_dir); /* create that file */ if ((fd = creat(TOP_CHECK_DIR "/foo", 0644)) == -1) { @@ -69,41 +56,8 @@ perror("check_acl"); exit(1); } - - /* get default permissions for existing file */ - foo_acl = get_branch_acl(topdir_acl, "foo"); - assert(foo_acl != NULL); - - /* default permissions allow to checkin/checkout revision on any branch */ - assert(branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); - - /* set only checkout permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkout); - assert(new_perm == branch_perm_checkout); - - assert(branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); - - assert(!branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkin)); - - /* set only checkin permissions for vasya, check it */ - new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkin); - assert(new_perm == branch_perm_checkin); - - assert(!branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkout)); - - assert(branch_permission_granted(foo_acl, "trunk", "vasya", - branch_perm_checkin)); - /* check that petya cannot get to file with ACLs */ - assert(!branch_permission_granted(foo_acl, "trunk", "petya", - branch_perm_checkout)); - - assert(!branch_permission_granted(foo_acl, "trunk", "petya", - branch_perm_checkin)); + check_existing_file_acl(top_dir); exit (0); } |
From: Alexey M. <ty...@us...> - 2001-08-29 19:58:00
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv10984 Added Files: Tag: NCLI-1-11-1 .cvsignore Log Message: Ignore binaries --- NEW FILE: .cvsignore --- Makefile .deps check_stringbuf check_user_acl check_acl |
From: Alexey M. <ty...@us...> - 2001-08-29 19:56:57
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv10353 Modified Files: Tag: NCLI-1-11-1 user-acl.c stringbuf.c dir-acl.c branch-acl.c branch-acl.h Log Message: Fix compilation with C++ compiler Index: user-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/user-acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- user-acl.c 2001/08/29 17:28:11 1.1.2.1 +++ user-acl.c 2001/08/29 19:56:54 1.1.2.2 @@ -49,7 +49,7 @@ acl = acl->next; } - acl = malloc(sizeof(USER_ACE)); + acl = (USER_ACL *) malloc(sizeof(USER_ACE)); if (acl == NULL) return NULL; Index: stringbuf.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/stringbuf.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- stringbuf.c 2001/08/29 17:29:46 1.1.2.1 +++ stringbuf.c 2001/08/29 19:56:54 1.1.2.2 @@ -14,7 +14,7 @@ if (str == NULL) return NULL; - sb = malloc(sizeof(struct stringbuf)); + sb = (struct stringbuf *) malloc(sizeof(struct stringbuf)); if (sb == NULL) return NULL; @@ -25,7 +25,7 @@ else allocated = sb->len * 2; - sb->buf = malloc(allocated); + sb->buf = (char *) malloc(allocated); if (sb->buf == NULL) { free(sb); return NULL; @@ -63,13 +63,13 @@ if (buf == NULL) return NULL; - newbuf = malloc(sizeof(struct stringbuf)); + newbuf = (struct stringbuf *) malloc(sizeof(struct stringbuf)); if (newbuf == NULL) return NULL; newbuf->len = buf->len; newbuf->allocated = buf->allocated; - newbuf->buf = malloc(buf->allocated); + newbuf->buf = (char *) malloc(buf->allocated); if (newbuf->buf == NULL) { free(newbuf); return NULL; @@ -83,7 +83,7 @@ catc_stringbuf (struct stringbuf *buf, char c) { if (buf->len + 1 > buf->allocated) { - char *tmp = realloc(buf->buf, buf->allocated * 2); + char *tmp = (char *) realloc(buf->buf, buf->allocated * 2); if (tmp == NULL) return NULL; buf->buf = tmp; @@ -112,7 +112,7 @@ if (buf->len + len > buf->allocated) { int needs_to_allocate = buf->allocated + buf->len * 2; - char *tmp = realloc(buf->buf, needs_to_allocate); + char *tmp = (char *) realloc(buf->buf, needs_to_allocate); if (tmp == NULL) return NULL; buf->buf = tmp; Index: dir-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- dir-acl.c 2001/08/29 17:28:51 1.1.2.1 +++ dir-acl.c 2001/08/29 19:56:54 1.1.2.2 @@ -19,6 +19,7 @@ #include "dir-acl.h" +#include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H @@ -38,7 +39,7 @@ return NULL; } - dir_acl = malloc(sizeof(struct DIR_ACL)); + dir_acl = (DIR_ACL *) malloc(sizeof(struct DIR_ACL)); if (dir_acl == NULL) return NULL; Index: branch-acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- branch-acl.c 2001/08/29 17:30:44 1.1.2.1 +++ branch-acl.c 2001/08/29 19:56:54 1.1.2.2 @@ -31,34 +31,36 @@ BRANCH_ACL * get_branch_acl (DIR_ACL *dir_acl, char *filename) { - BRANCH_ACL * file_acl; + BRANCH_ACL * branch_acl; struct stat stat_buf; - file_acl = malloc(sizeof(struct BRANCH_ACL)); - if (file_acl == NULL) + branch_acl = (BRANCH_ACL*) malloc(sizeof(struct BRANCH_ACL)); + if (branch_acl == NULL) return NULL; - file_acl->filename = dup_stringbuf(dir_acl->dirname); - if (file_acl->filename == NULL) { - free(file_acl); + branch_acl->filename = dup_stringbuf(dir_acl->dirname); + if (branch_acl->filename == NULL) { + free(branch_acl); return NULL; } - catc_stringbuf(file_acl->filename, '/'); - cat_stringbuf(file_acl->filename, filename); + catc_stringbuf(branch_acl->filename, '/'); + cat_stringbuf(branch_acl->filename, filename); - if (stat(file_acl->filename->buf, &stat_buf) == -1) { + if (stat(branch_acl->filename->buf, &stat_buf) == -1) { return NULL; } - file_acl->user_acls = NULL; + branch_acl->dir_acl = dir_acl; - return file_acl; + branch_acl->user_acls = NULL; + + return branch_acl; } int -branch_permission_granted (BRANCH_ACL *file_acl, +branch_permission_granted (BRANCH_ACL *branch_acl, char *branch, char *username, branch_permission perm) @@ -66,10 +68,10 @@ USER_ACE *ace; /* no list of users, use default permissions */ - if (file_acl->user_acls == NULL) + if (branch_acl->user_acls == NULL) return default_branch_perm && perm; - ace = get_user_ace(file_acl->user_acls, username); + ace = get_user_ace(branch_acl->user_acls, username); if (ace == NULL) return 0; @@ -79,13 +81,13 @@ int -set_branch_acl (BRANCH_ACL *file_acl, +set_branch_acl (BRANCH_ACL *branch_acl, char *branch, char *username, branch_permission perm) { - file_acl->user_acls = set_user_ace(file_acl->user_acls, username, perm); + branch_acl->user_acls = set_user_ace(branch_acl->user_acls, username, perm); return perm; } Index: branch-acl.h =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/branch-acl.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- branch-acl.h 2001/08/29 17:30:44 1.1.2.1 +++ branch-acl.h 2001/08/29 19:56:54 1.1.2.2 @@ -25,10 +25,12 @@ struct BRANCH_ACL { stringbuf *filename; + DIR_ACL *dir_acl; USER_ACL *user_acls; }; -enum { +enum { + branch_perm_none = 0x00, branch_perm_checkout = 0x01, branch_perm_checkin = 0x02, default_branch_perm = branch_perm_checkout | branch_perm_checkin |
From: Alexey M. <ty...@us...> - 2001-08-29 19:53:19
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv8630 Added Files: Tag: NCLI-1-11-1 cleanup.sh Log Message: Script to clean-up test directory before checking --- NEW FILE: cleanup.sh --- #! /bin/bash echo -n "Cleaning up the test space... " rm -rf -- /tmp/acl-test/ echo done exit 0 |
From: Alexey M. <ty...@us...> - 2001-08-29 17:31:41
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv25082 Modified Files: Tag: NCLI-1-11-1 check_acl.c Log Message: More tests for branch- and dir-level ACLs Index: check_acl.c =================================================================== RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/check_acl.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- check_acl.c 2001/08/26 20:44:02 1.1.2.1 +++ check_acl.c 2001/08/29 17:31:38 1.1.2.2 @@ -16,16 +16,94 @@ */ -#include "acl.h" +#include "branch-acl.h" #include <assert.h> +#include <errno.h> +#include <fcntl.h> #include <stdlib.h> +#include <stdio.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#define TOP_CHECK_DIR "/tmp/acl-test" + int -main (int argc, char *argv[]) +main (void) { - DIR_ACL *topdir_acl = start_acl_traverse("/tmp/acl-test"); + char *top_dir = TOP_CHECK_DIR; + int fd; + int new_perm; + + DIR_ACL *topdir_acl; + BRANCH_ACL *foo_acl; + + /* check that ACLs don't work for non-existing directory */ + + topdir_acl = start_acl_traverse(top_dir); + assert(topdir_acl == NULL); + assert(errno == ENOENT); + + /* create that directory */ + if (mkdir(TOP_CHECK_DIR, 0755) == -1) { + perror("check_acl"); + exit (1); + } + + /* check that ACLs get created for existing directory */ + topdir_acl = start_acl_traverse(top_dir); assert(topdir_acl != NULL); - check_reading(topdir_acl, "foo"); + /* check that ACLs don't work for non-existing file */ + foo_acl = get_branch_acl(topdir_acl, "foo"); + + assert(foo_acl == NULL); + + /* create that file */ + if ((fd = creat(TOP_CHECK_DIR "/foo", 0644)) == -1) { + perror("check_acl"); + exit (1); + } + if (close(fd) == -1) { + perror("check_acl"); + exit(1); + } + + /* get default permissions for existing file */ + foo_acl = get_branch_acl(topdir_acl, "foo"); + assert(foo_acl != NULL); + + /* default permissions allow to checkin/checkout revision on any branch */ + assert(branch_permission_granted(foo_acl, "trunk", "vasya", + branch_perm_checkout)); + + /* set only checkout permissions for vasya, check it */ + new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkout); + assert(new_perm == branch_perm_checkout); + + assert(branch_permission_granted(foo_acl, "trunk", "vasya", + branch_perm_checkout)); + + assert(!branch_permission_granted(foo_acl, "trunk", "vasya", + branch_perm_checkin)); + + /* set only checkin permissions for vasya, check it */ + new_perm = set_branch_acl(foo_acl, "trunk", "vasya", branch_perm_checkin); + assert(new_perm == branch_perm_checkin); + + assert(!branch_permission_granted(foo_acl, "trunk", "vasya", + branch_perm_checkout)); + + assert(branch_permission_granted(foo_acl, "trunk", "vasya", + branch_perm_checkin)); + + /* check that petya cannot get to file with ACLs */ + assert(!branch_permission_granted(foo_acl, "trunk", "petya", + branch_perm_checkout)); + + assert(!branch_permission_granted(foo_acl, "trunk", "petya", + branch_perm_checkin)); + + exit (0); } |
From: Alexey M. <ty...@us...> - 2001-08-29 17:30:47
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv24551 Added Files: Tag: NCLI-1-11-1 branch-acl.c branch-acl.h Log Message: Branch-level ACLs: initial implementation --- NEW FILE: branch-acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Per-branch ACL implementation */ #include "config.h" #include "branch-acl.h" #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H #include "unistd.h" #endif BRANCH_ACL * get_branch_acl (DIR_ACL *dir_acl, char *filename) { BRANCH_ACL * file_acl; struct stat stat_buf; file_acl = malloc(sizeof(struct BRANCH_ACL)); if (file_acl == NULL) return NULL; file_acl->filename = dup_stringbuf(dir_acl->dirname); if (file_acl->filename == NULL) { free(file_acl); return NULL; } catc_stringbuf(file_acl->filename, '/'); cat_stringbuf(file_acl->filename, filename); if (stat(file_acl->filename->buf, &stat_buf) == -1) { return NULL; } file_acl->user_acls = NULL; return file_acl; } int branch_permission_granted (BRANCH_ACL *file_acl, char *branch, char *username, branch_permission perm) { USER_ACE *ace; /* no list of users, use default permissions */ if (file_acl->user_acls == NULL) return default_branch_perm && perm; ace = get_user_ace(file_acl->user_acls, username); if (ace == NULL) return 0; return ace->perm & perm; } int set_branch_acl (BRANCH_ACL *file_acl, char *branch, char *username, branch_permission perm) { file_acl->user_acls = set_user_ace(file_acl->user_acls, username, perm); return perm; } --- NEW FILE: branch-acl.h --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Per-branch ACL implementation */ #ifndef BRANCH_ACL_H #define BRANCH_ACL_H 1 #include "dir-acl.h" #include "user-acl.h" #include "stringbuf.h" struct BRANCH_ACL { stringbuf *filename; USER_ACL *user_acls; }; enum { branch_perm_checkout = 0x01, branch_perm_checkin = 0x02, default_branch_perm = branch_perm_checkout | branch_perm_checkin }; typedef int branch_permission; typedef struct BRANCH_ACL BRANCH_ACL; BRANCH_ACL *get_branch_acl (DIR_ACL *dir_acl, char *file); int set_branch_acl (BRANCH_ACL *file_acl, char *branch, char *username, branch_permission perm); int branch_permission_granted (BRANCH_ACL *file_acl, char *branch, char *username, branch_permission perm); #endif |
From: Alexey M. <ty...@us...> - 2001-08-29 17:29:49
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv24025 Added Files: Tag: NCLI-1-11-1 stringbuf.c stringbuf.h check_stringbuf.c Log Message: struct stringbuf: initial implementation --- NEW FILE: stringbuf.c --- #include "stringbuf.h" #include <assert.h> #include <stdlib.h> #include <string.h> struct stringbuf * new_stringbuf (char *str) { struct stringbuf *sb; int allocated; if (str == NULL) return NULL; sb = malloc(sizeof(struct stringbuf)); if (sb == NULL) return NULL; sb->len = strlen(str); if (sb->len == 0) allocated = 8; else allocated = sb->len * 2; sb->buf = malloc(allocated); if (sb->buf == NULL) { free(sb); return NULL; } strcpy(sb->buf, str); sb->allocated = allocated; return sb; } int free_stringbuf (struct stringbuf *buf) { if (buf == NULL) return 1; free(buf->buf); buf->buf = NULL; buf->allocated = 0; buf->len = 0; return 1; } struct stringbuf * dup_stringbuf (struct stringbuf *buf) { struct stringbuf *newbuf; if (buf == NULL) return NULL; newbuf = malloc(sizeof(struct stringbuf)); if (newbuf == NULL) return NULL; newbuf->len = buf->len; newbuf->allocated = buf->allocated; newbuf->buf = malloc(buf->allocated); if (newbuf->buf == NULL) { free(newbuf); return NULL; } strcpy(newbuf->buf, buf->buf); return newbuf; } struct stringbuf * catc_stringbuf (struct stringbuf *buf, char c) { if (buf->len + 1 > buf->allocated) { char *tmp = realloc(buf->buf, buf->allocated * 2); if (tmp == NULL) return NULL; buf->buf = tmp; buf->allocated = buf->allocated * 2; } buf->buf[buf->len++] = c; buf->buf[buf->len] = '\0'; return buf; } struct stringbuf * cat_stringbuf (struct stringbuf *buf, char *str) { int len; if (buf == NULL) return NULL; if (str == NULL) return buf; len = strlen(str); if (len == 0) return buf; if (buf->len + len > buf->allocated) { int needs_to_allocate = buf->allocated + buf->len * 2; char *tmp = realloc(buf->buf, needs_to_allocate); if (tmp == NULL) return NULL; buf->buf = tmp; buf->allocated = needs_to_allocate; } strcpy(buf->buf + buf->len, str); buf->len += len; return buf; } --- NEW FILE: stringbuf.h --- #ifndef STRINGBUF_H #define STRINGBUF_H 1 struct stringbuf { char *buf; unsigned int len; unsigned int allocated; }; typedef struct stringbuf stringbuf; struct stringbuf *new_stringbuf (char *str); int free_stringbuf (struct stringbuf *); struct stringbuf *dup_stringbuf (struct stringbuf *buf); struct stringbuf *catc_stringbuf (struct stringbuf *buf, char c); struct stringbuf *cat_stringbuf (struct stringbuf *buf, char *str); #endif /* STRINGBUF_H */ --- NEW FILE: check_stringbuf.c --- #include "stringbuf.h" #include <assert.h> #include <stdlib.h> static void test_NULL_stringbuf (void) { /* cannot create stringbuf from NULL string */ struct stringbuf *buf; struct stringbuf *buf2; buf = new_stringbuf(NULL); assert(buf == NULL); /* check that duplicating NULL stringbuf works */ buf2 = dup_stringbuf(NULL); assert(buf2 == NULL); /* check that freeing NULL stringbuf works */ free_stringbuf (buf); } static void test_empty_stringbuf (void) { /* check creating new stringbuf from empty string */ struct stringbuf *buf; struct stringbuf *buf2; buf = new_stringbuf(""); assert(buf->buf != NULL); assert(buf->len == 0); assert(buf->allocated > 0); assert(strcmp(buf->buf, "") == 0); /* check duplicating empty stringbuf */ buf2 = dup_stringbuf(buf); assert(buf2->buf != NULL); assert(buf2->len == 0); assert(buf2->allocated > 0); assert(strcmp(buf2->buf, "") == 0); /* check freeing empty stringbuf */ assert(free_stringbuf(buf)); assert(buf != NULL); assert(buf->len == 0); assert(buf->buf == NULL); assert(buf->allocated == 0); /* free the duplicated stringbuf */ assert(free_stringbuf(buf2)); } static void test_stringbuf (void) { /* check creating new stringbuf */ struct stringbuf *buf; struct stringbuf *buf2; buf = new_stringbuf("foo"); assert(buf->buf != NULL); assert(strlen(buf->buf) == buf->len); assert(buf->allocated >= buf->len); assert(strcmp(buf->buf, "foo") == 0); /* check duplicating stringbuf */ buf2 = dup_stringbuf(buf); assert(buf2 != NULL); assert(buf->len == buf2->len); assert(buf->allocated == buf2->allocated); assert(strcmp(buf->buf, buf2->buf) == 0); assert(strcmp(buf->buf, "foo") == 0); /* check freeing non-empty stringbuf */ assert(free_stringbuf(buf)); assert(buf != NULL); assert(buf->len == 0); assert(buf->buf == NULL); assert(buf->allocated == 0); assert(free_stringbuf(buf2)); } static void test_catc_stringbuf (void) { struct stringbuf *buf; struct stringbuf *tmp; unsigned int old_allocated; unsigned int old_len; buf = new_stringbuf(""); /* check adding a single character to empty stringbuf */ tmp = catc_stringbuf(buf, 'c'); assert(tmp == buf); assert(buf->len == 1); assert(strcmp(buf->buf, "c") == 0); assert(buf->allocated > buf->len); /* check adding a single character to non-empty stringbuf */ tmp = catc_stringbuf(buf, 'c'); assert(tmp == buf); assert(buf->len == 2); assert(strcmp(buf->buf, "cc") == 0); assert(buf->allocated > buf->len); /* add characters until there is a need to reallocate */ while (buf->allocated > buf->len) { struct stringbuf *tmp; tmp = catc_stringbuf(buf, 'c'); } /* the reallocation must now happen */ old_allocated = buf->allocated; old_len = buf->len; tmp = catc_stringbuf(buf, 'c'); /* check that reallocation happened */ assert(tmp == buf); assert(buf->allocated > old_allocated); assert(buf->len = old_len + 1); assert(free_stringbuf(buf)); } static void test_cat_stringbuf (void) { struct stringbuf *buf; struct stringbuf *tmp; unsigned int old_allocated; unsigned int old_len; /* cannot cat to NULL stringbuf */ tmp = cat_stringbuf(NULL, "foo"); assert(tmp == NULL); buf = new_stringbuf(""); /* check catting of NULL string to stringbuf */ tmp = cat_stringbuf(buf, NULL); assert(tmp == buf); assert(buf->len == 0); assert(strcmp(buf->buf, "") == 0); /* check catting of empty string to stringbuf */ tmp = cat_stringbuf(buf, ""); assert(tmp == buf); assert(buf->len == 0); assert(strcmp(buf->buf, "") == 0); /* check catting the string to stringbuf */ tmp = cat_stringbuf(buf, "foo"); assert(tmp == buf); assert(buf->len == 3); assert(buf->allocated > buf->len); assert(strcmp(buf->buf, "foo") == 0); /* add characters until there is a need to reallocate */ while (buf->allocated > buf->len) { struct stringbuf *tmp; tmp = catc_stringbuf(buf, 'c'); } /* check catting the string to stringbuf with reallocation */ old_len = buf->len; old_allocated = buf->allocated; tmp = cat_stringbuf(buf, "bar"); assert(tmp == buf); assert(buf->allocated > old_allocated); assert(buf->len = old_len + 3); assert(free_stringbuf(buf)); } int main(void) { test_NULL_stringbuf(); test_empty_stringbuf(); test_stringbuf(); test_catc_stringbuf(); test_cat_stringbuf(); exit(0); } |
From: Alexey M. <ty...@us...> - 2001-08-29 17:28:54
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv23536 Added Files: Tag: NCLI-1-11-1 dir-acl.c dir-acl.h Log Message: Directory-level ACLs: initial implementation --- NEW FILE: dir-acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Per-directory ACL implementation */ #include "config.h" #include "dir-acl.h" #include <sys/stat.h> #include <sys/types.h> #ifdef HAVE_UNISTD_H #include "unistd.h" #endif DIR_ACL * start_acl_traverse (char *dir) { struct DIR_ACL *dir_acl; struct stat stat_buf; if (stat(dir, &stat_buf) == -1) { return NULL; } dir_acl = malloc(sizeof(struct DIR_ACL)); if (dir_acl == NULL) return NULL; dir_acl->dirname = new_stringbuf(dir); return dir_acl; } --- NEW FILE: dir-acl.h --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Per-directory ACL implementation */ #ifndef DIR_ACL_H #define DIR_ACL_H 1 #include "stringbuf.h" struct DIR_ACL { stringbuf *dirname; }; typedef struct DIR_ACL DIR_ACL; DIR_ACL *start_acl_traverse(char *dir); #endif /* DIR_ACL_H */ |
From: Alexey M. <ty...@us...> - 2001-08-29 17:28:14
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv23071 Added Files: Tag: NCLI-1-11-1 user-acl.c user-acl.h check_user_acl.c Log Message: List of users permissions: initial implementation --- NEW FILE: user-acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 List of user permissions implementation */ #include "config.h" #include "user-acl.h" #include <stdlib.h> USER_ACE * get_user_ace (USER_ACL *acls, char *username) { USER_ACL *acl = acls; while (acl != NULL) { if (strcmp(acl->username, username) == 0) return acl; acl = acl->next; } return NULL; } USER_ACL * set_user_ace (USER_ACL *acls, char *username, int perm) { USER_ACL *acl = acls; while (acl != NULL) { if (strcmp(acl->username, username) == 0) { acl->perm = perm; return acls; } acl = acl->next; } acl = malloc(sizeof(USER_ACE)); if (acl == NULL) return NULL; acl->username = username; acl->perm = perm; acl->next = acls; return acl; } --- NEW FILE: user-acl.h --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 List of user permissions implementation */ #ifndef USER_ACL_H #define USER_ACL_H 1 struct USER_ACL { char *username; int perm; struct USER_ACL *next; }; typedef struct USER_ACL USER_ACL; typedef struct USER_ACL USER_ACE; USER_ACL * set_user_ace(USER_ACL *acls, char *username, int perm); USER_ACE * get_user_ace (USER_ACL *acls, char *username); #endif /* USER_ACL_H */ --- NEW FILE: check_user_acl.c --- #include "user-acl.h" #include <assert.h> #include <stdlib.h> int main (void) { USER_ACL *user_acl = NULL; USER_ACE *user_ace; /* no users in empty list */ user_ace = get_user_ace (user_acl, "ann"); assert(user_ace == NULL); /* set permissions for user */ user_acl = set_user_ace (NULL, "ann", 10); assert(user_acl != NULL); /* check that they are the same as were set */ user_ace = get_user_ace (user_acl, "ann"); assert(user_ace != NULL); assert(user_ace->perm == 10); assert(user_ace->username != NULL); assert(strcmp(user_acl->username, "ann") == 0); /* check that no other user gets any permission */ user_ace = get_user_ace (user_acl, "bob"); assert(user_ace == NULL); /* set permissions for second user */ user_acl = set_user_ace (user_acl, "bob", 20); /* check that they are the same as were set */ user_ace = get_user_ace(user_acl, "bob"); assert(user_acl != NULL); assert(user_ace->perm == 20); assert(user_ace->username != NULL); assert(strcmp(user_acl->username, "bob") == 0); /* check that permissions for first user are still accessible */ user_ace = get_user_ace (user_acl, "ann"); assert(user_ace != NULL); assert(user_ace->perm == 10); assert(user_ace->username != NULL); assert(strcmp(user_ace->username, "ann") == 0); /* reset permissions for first user */ user_acl = set_user_ace (NULL, "ann", 25); assert(user_acl != NULL); /* check that they are the same as were set */ user_ace = get_user_ace (user_acl, "ann"); assert(user_ace != NULL); assert(user_ace->perm == 25); assert(user_ace->username != NULL); assert(strcmp(user_acl->username, "ann") == 0); exit(0); } |
From: Alexey M. <ty...@us...> - 2001-08-29 17:10:07
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv8354 Removed Files: Tag: NCLI-1-11-1 acl.c acl.h Log Message: Split into dir-acl and branch-acl --- acl.c DELETED --- --- acl.h DELETED --- |
From: Alexey M. <ty...@us...> - 2001-08-26 20:44:30
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl In directory usw-pr-cvs1:/tmp/cvs-serv710 Added Files: Tag: NCLI-1-11-1 acl.c acl.h Log Message: Access Control Lists implementation --- NEW FILE: acl.c --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Access Control Lists implementation */ #include "acl.h" #include <stdlib.h> DIR_ACL * start_acl_traverse (char *dir) { struct DIR_ACL *dir_acl = malloc(sizeof(struct DIR_ACL)); if (dir_acl == NULL) return NULL; return dir_acl; } int check_reading (DIR_ACL *dir_acl, char *file) { return 0; } --- NEW FILE: acl.h --- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright (c) Alexey Mahotkin <al...@hs...> 2001 Access Control Lists implementation */ #ifndef ACL_H #define ACL_H 1 struct DIR_ACL { }; typedef struct DIR_ACL DIR_ACL; DIR_ACL *start_acl_traverse(char *dir); int check_reading (DIR_ACL* dir_acl, char *file); #endif /* ACL_H */ |