In dblink._security_check(), use os.path.realpath to make sure that the same path...
authorZac Medico <zmedico@gentoo.org>
Thu, 21 Jun 2007 02:19:54 +0000 (02:19 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 21 Jun 2007 02:19:54 +0000 (02:19 -0000)
svn path=/main/trunk/; revision=6894

pym/portage/dbapi/vartree.py

index 68545a53b3ca44fb627e50bf9d75d47f076ba2b1..2c1e036940b2963224e7f6d4b68ccd95e4794f79 100644 (file)
@@ -1506,6 +1506,7 @@ class dblink(object):
                for dblnk in installed_instances:
                        file_paths.update(dblnk.getcontents())
                inode_map = {}
+               real_paths = set()
                for path in file_paths:
                        try:
                                s = os.lstat(path)
@@ -1514,8 +1515,13 @@ class dblink(object):
                                        raise
                                del e
                                continue
-                       if stat.S_ISREG(s.st_mode) and \
-                               s.st_nlink > 1 and \
+                       if not stat.S_ISREG(s.st_mode):
+                               continue
+                       path = os.path.realpath(path)
+                       if path in real_paths:
+                               continue
+                       real_paths.add(path)
+                       if s.st_nlink > 1 and \
                                s.st_mode & (stat.S_ISUID | stat.S_ISGID):
                                k = (s.st_dev, s.st_ino)
                                inode_map.setdefault(k, []).append((path, s))