Module Name:    src
Committed By:   christos
Date:           Thu Mar  8 20:48:22 UTC 2012

Modified Files:
        src/external/gpl2/xcvs/dist/src: add.c admin.c annotate.c commit.c
            remove.c

Log Message:
add acl support


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/gpl2/xcvs/dist/src/add.c \
    src/external/gpl2/xcvs/dist/src/annotate.c \
    src/external/gpl2/xcvs/dist/src/remove.c
cvs rdiff -u -r1.4 -r1.5 src/external/gpl2/xcvs/dist/src/admin.c
cvs rdiff -u -r1.3 -r1.4 src/external/gpl2/xcvs/dist/src/commit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl2/xcvs/dist/src/add.c
diff -u src/external/gpl2/xcvs/dist/src/add.c:1.2 src/external/gpl2/xcvs/dist/src/add.c:1.3
--- src/external/gpl2/xcvs/dist/src/add.c:1.2	Fri Apr 10 07:20:29 2009
+++ src/external/gpl2/xcvs/dist/src/add.c	Thu Mar  8 15:48:22 2012
@@ -401,6 +401,25 @@ add (int argc, char **argv)
 		    }
 		    else
 		    {
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+			if (use_cvs_acl /* && server_active */)
+			{
+			    if (!access_allowed (finfo.file, repository,
+						 vers->tag, 6, NULL, NULL, 1))
+			    {
+				if (stop_at_first_permission_denied)
+				    error (1, 0, "permission denied for %s",
+					   Short_Repository (finfo.repository));
+				else
+				    error (0, 0, "permission denied for %s/%s",
+					   Short_Repository (finfo.repository),
+					   finfo.file);
+			
+				return (0);
+			    }
+			}
+#endif
 			/* There is a user file, so build the entry for it */
 			if (build_entry (repository, finfo.file, vers->options,
 					 message, entries, vers->tag) != 0)
@@ -675,6 +694,25 @@ add (int argc, char **argv)
 	    && isdir (finfo.file)
 	    && !wrap_name_has (finfo.file, WRAP_TOCVS))
 	{
+
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+	    if (use_cvs_acl /* && server_active */)
+	    {
+		if (!access_allowed (NULL, repository, NULL, 6, NULL, NULL, 1))
+		{
+		    if (stop_at_first_permission_denied)
+			error (1, 0, "permission denied for %s",
+			       Short_Repository (finfo.repository));
+		    else
+			error (0, 0, "permission denied for %s/%s",
+			       Short_Repository (finfo.repository), finfo.file);
+			
+		    return (0);
+		}
+	    }
+#endif
+
 	    err += add_directory (&finfo);
 	}
 	else
Index: src/external/gpl2/xcvs/dist/src/annotate.c
diff -u src/external/gpl2/xcvs/dist/src/annotate.c:1.2 src/external/gpl2/xcvs/dist/src/annotate.c:1.3
--- src/external/gpl2/xcvs/dist/src/annotate.c:1.2	Fri Apr 10 07:20:29 2009
+++ src/external/gpl2/xcvs/dist/src/annotate.c	Thu Mar  8 15:48:22 2012
@@ -267,6 +267,25 @@ annotate_fileproc (void *callerdat, stru
     if (version == NULL)
         return 0;
 
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+    if (use_cvs_acl /* && server_active */)
+    {
+	if (!access_allowed (finfo->file, finfo->repository, version, 5,
+			     NULL, NULL, 1))
+	{
+	    if (stop_at_first_permission_denied)
+		error (1, 0, "permission denied for %s",
+		       Short_Repository (finfo->repository));
+	    else
+		error (0, 0, "permission denied for %s/%s",
+		       Short_Repository (finfo->repository), finfo->file);
+			
+	    return (0);
+	}
+    }
+#endif
+
     /* Distinguish output for various files if we are processing
        several files.  */
     cvs_outerr ("\nAnnotations for ", 0);
Index: src/external/gpl2/xcvs/dist/src/remove.c
diff -u src/external/gpl2/xcvs/dist/src/remove.c:1.2 src/external/gpl2/xcvs/dist/src/remove.c:1.3
--- src/external/gpl2/xcvs/dist/src/remove.c:1.2	Fri Apr 10 07:20:30 2009
+++ src/external/gpl2/xcvs/dist/src/remove.c	Thu Mar  8 15:48:22 2012
@@ -241,6 +241,25 @@ cannot remove file `%s' which has a stic
     {
 	char *fname;
 
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+	if (use_cvs_acl /* && server_active */)
+	{
+	    if (!access_allowed (finfo->file, finfo->repository, vers->tag, 7,
+				 NULL, NULL, 1))
+	    {
+		if (stop_at_first_permission_denied)
+		    error (1, 0, "permission denied for %s",
+			   Short_Repository (finfo->repository));
+		else
+		    error (0, 0, "permission denied for %s/%s",
+			   Short_Repository (finfo->repository), finfo->file);
+			
+		return (0);
+	    }
+	}
+#endif
+
 	/* Re-register it with a negative version number.  */
 	fname = Xasprintf ("-%s", vers->vn_user);
 	Register (finfo->entries, finfo->file, fname, vers->ts_rcs,

Index: src/external/gpl2/xcvs/dist/src/admin.c
diff -u src/external/gpl2/xcvs/dist/src/admin.c:1.4 src/external/gpl2/xcvs/dist/src/admin.c:1.5
--- src/external/gpl2/xcvs/dist/src/admin.c:1.4	Sat Sep  5 08:50:33 2009
+++ src/external/gpl2/xcvs/dist/src/admin.c	Thu Mar  8 15:48:22 2012
@@ -690,6 +690,25 @@ admin_fileproc (void *callerdat, struct 
 
     vers = Version_TS (finfo, NULL, NULL, NULL, 0, 0);
 
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+    if (use_cvs_acl /* && server_active */)
+    {
+	if (!access_allowed (finfo->file, finfo->repository, NULL, 2,
+			     NULL, NULL, 1))
+	{
+	    if (stop_at_first_permission_denied)
+		error (1, 0, "permission denied for %s",
+		       Short_Repository (finfo->repository));
+	    else
+		error (0, 0, "permission denied for %s/%s",
+		       Short_Repository (finfo->repository), finfo->file);
+			
+	    return (0);
+	}
+    }
+#endif
+
     version = vers->vn_user;
     if (version != NULL && strcmp (version, "0") == 0)
     {

Index: src/external/gpl2/xcvs/dist/src/commit.c
diff -u src/external/gpl2/xcvs/dist/src/commit.c:1.3 src/external/gpl2/xcvs/dist/src/commit.c:1.4
--- src/external/gpl2/xcvs/dist/src/commit.c:1.3	Fri Apr 10 07:20:29 2009
+++ src/external/gpl2/xcvs/dist/src/commit.c	Thu Mar  8 15:48:22 2012
@@ -1379,6 +1379,34 @@ commit_fileproc (void *callerdat, struct
 	return 0;
 
     ci = p->data;
+
+/* cvsacl patch */
+#ifdef SERVER_SUPPORT
+    if (use_cvs_acl /* && server_active */)
+    {
+	int whichperm;
+	if (ci->status == T_MODIFIED)
+	    whichperm = 3;
+	else if (ci->status == T_ADDED)
+	    whichperm = 6;
+	else if (ci->status == T_REMOVED)	
+	    whichperm = 7;
+
+	if (!access_allowed (finfo->file, finfo->repository, ci->tag, whichperm,
+			     NULL, NULL, 1))
+	{
+	    if (stop_at_first_permission_denied)
+		error (1, 0, "permission denied for %s",
+		       Short_Repository (finfo->repository));
+	    else
+		error (0, 0, "permission denied for %s/%s",
+		       Short_Repository (finfo->repository), finfo->file);
+			
+		return (0);
+	}
+    }
+#endif
+
     if (ci->status == T_MODIFIED)
     {
 	if (finfo->rcs == NULL)

Reply via email to