SOURCES: gradm-symlink_depth.patch (NEW) - limit symlinks

zbyniu zbyniu at pld-linux.org
Mon Apr 20 15:09:11 CEST 2009


Author: zbyniu                       Date: Mon Apr 20 13:09:11 2009 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- limit symlinks

---- Files affected:
SOURCES:
   gradm-symlink_depth.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gradm-symlink_depth.patch
diff -u /dev/null SOURCES/gradm-symlink_depth.patch:1.1
--- /dev/null	Mon Apr 20 15:09:12 2009
+++ SOURCES/gradm-symlink_depth.patch	Mon Apr 20 15:09:05 2009
@@ -0,0 +1,48 @@
+diff -upr gradm2./gradm_defs.h gradm2/gradm_defs.h
+--- gradm2./gradm_defs.h	2009-02-25 16:38:51.413559473 +0000
++++ gradm2/gradm_defs.h	2009-02-25 17:06:58.624996368 +0000
+@@ -37,6 +37,7 @@
+ 
+ #define MAX_INCLUDE_DEPTH	20
+ #define MAX_NEST_DEPTH		8
++#define MAX_SYMLINK_DEPTH	8
+ 
+ #ifndef RLIMIT_LOCKS
+ #define RLIMIT_LOCKS 10
+diff -upr gradm2./gradm_parse.c gradm2/gradm_parse.c
+--- gradm2./gradm_parse.c	2009-02-25 16:38:51.417084282 +0000
++++ gradm2/gradm_parse.c	2009-02-25 17:14:40.444676181 +0000
+@@ -608,6 +608,7 @@
+ 	struct deleted_file *dfile;
+ 	unsigned int file_len;
+ 	char *str;
++	static int link_count = 0;
+ 
+ 	if (!subject) {
+ 		fprintf(stderr, "Error on line %lu of %s.  Attempt to "
+@@ -665,12 +666,20 @@ add_proc_object_acl(struct proc_acl *sub
+ 		fstat.st_ino = dfile->ino;
+ 		fstat.st_dev = 0;
+ 		mode |= GR_DELETED;
++		link_count = 0;
+ 	} else if (S_ISLNK(fstat.st_mode)) {
+-		char buf[PATH_MAX];
+-		memset(&buf, 0, sizeof (buf));
+-		realpath(filename, buf);
+-		if(!add_proc_object_acl(subject, gr_strdup(buf), mode, type | GR_SYMLINK))
+-			return 0;
++		if (link_count > MAX_SYMLINK_DEPTH) {
++			fprintf(stderr, "Too many levels of symbolic links "
++					"%s\n", filename);
++			exit(EXIT_FAILURE);
++		} else {
++			char buf[PATH_MAX];
++			memset(&buf, 0, sizeof (buf));
++			realpath(filename, buf);
++			link_count++;
++			if(!add_proc_object_acl(subject, gr_strdup(buf), mode, type | GR_SYMLINK))
++				return 0;
++		}
+ 	}
+ 
+ 	if ((p =
================================================================


More information about the pld-cvs-commit mailing list