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:20:17 +0000 (02:20 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 21 Jun 2007 02:20:17 +0000 (02:20 -0000)
svn path=/main/branches/2.1.2/; revision=6895

pym/portage.py

index 054435bff526e9718a63fd173705bee6d2a9819f..fe99c0c9bcc9b4156bad7a6b43b499cd863d9e00 100644 (file)
@@ -7322,6 +7322,7 @@ class dblink:
                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)
@@ -7330,8 +7331,13 @@ class dblink:
                                        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))