From: "Mike Frysinger (vapier)" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] gentoo-projects commit in pax-utils: lddtree.py
Date: Wed, 30 Jul 2014 08:22:07 +0000 (UTC) [thread overview]
Message-ID: <20140730082208.2CEB92004E@flycatcher.gentoo.org> (raw)
vapier 14/07/30 08:22:07
Modified: lddtree.py
Log:
lddtree: do symlink resolution on args on the command line
This is needed when given a path which itself is an absolute symlink. If we deref it as-is, we end up poking into / instead of $ROOT.
Revision Changes Path
1.50 pax-utils/lddtree.py
file : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/lddtree.py?rev=1.50&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/lddtree.py?rev=1.50&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/lddtree.py?r1=1.49&r2=1.50
Index: lddtree.py
===================================================================
RCS file: /var/cvsroot/gentoo-projects/pax-utils/lddtree.py,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- lddtree.py 30 Jul 2014 04:34:09 -0000 1.49
+++ lddtree.py 30 Jul 2014 08:22:07 -0000 1.50
@@ -4,7 +4,7 @@
# Copyright 2012-2014 The Chromium OS Authors
# Use of this source code is governed by a BSD-style license (BSD-3)
# pylint: disable=C0301
-# $Header: /var/cvsroot/gentoo-projects/pax-utils/lddtree.py,v 1.49 2014/07/30 04:34:09 vapier Exp $
+# $Header: /var/cvsroot/gentoo-projects/pax-utils/lddtree.py,v 1.50 2014/07/30 08:22:07 vapier Exp $
# TODO: Handle symlinks.
@@ -307,7 +307,7 @@
def ParseELF(path, root='/', prefix='', ldpaths={'conf':[], 'env':[], 'interp':[]},
- debug=False, _first=True, _all_libs={}):
+ display=None, debug=False, _first=True, _all_libs={}):
"""Parse the ELF dependency tree of the specified file
Args:
@@ -317,6 +317,7 @@
prefix: The path under |root| to search
ldpaths: dict containing library paths to search; should have the keys:
conf, env, interp
+ display: The path to show rather than |path|
debug: Enable debug output
_first: Recursive use only; is this the first ELF ?
_all_libs: Recursive use only; dict of all libs we've seen
@@ -343,7 +344,7 @@
ldpaths = ldpaths.copy()
ret = {
'interp': None,
- 'path': path,
+ 'path': path if display is None else display,
'needed': [],
'rpath': [],
'runpath': [],
@@ -422,7 +423,8 @@
'needed': [],
}
if fullpath:
- lret = ParseELF(fullpath, root, prefix, ldpaths, debug, False, _all_libs)
+ lret = ParseELF(fullpath, root, prefix, ldpaths, debug=debug,
+ _first=False, _all_libs=_all_libs)
_all_libs[lib]['needed'] = lret['needed']
del elf
@@ -435,7 +437,7 @@
def _ShowVersion(_option, _opt, _value, _parser):
- d = '$Id: lddtree.py,v 1.49 2014/07/30 04:34:09 vapier Exp $'.split()
+ d = '$Id: lddtree.py,v 1.50 2014/07/30 08:22:07 vapier Exp $'.split()
print('%s-%s %s %s' % (d[1].split('.')[0], d[2], d[3], d[4]))
sys.exit(0)
@@ -684,10 +686,26 @@
matched = False
for p in glob.iglob(path):
+ # Once we've processed the globs, resolve the symlink. This way you can
+ # operate on a path that is an absolute symlink itself. e.g.:
+ # $ ln -sf /bin/bash $PWD/root/bin/sh
+ # $ lddtree --root $PWD/root /bin/sh
+ # First we'd turn /bin/sh into $PWD/root/bin/sh, then we want to resolve
+ # the symlink to $PWD/root/bin/bash rather than a plain /bin/bash.
+ dbg(options.debug, ' globbed =', p)
+ if not path.startswith('/'):
+ realpath = os.path.realpath(path)
+ elif options.auto_root:
+ realpath = readlink(p, options.root, prefixed=True)
+ else:
+ realpath = path
+ if path != realpath:
+ dbg(options.debug, ' resolved =', realpath)
+
matched = True
try:
- elf = ParseELF(p, options.root, options.prefix, ldpaths,
- debug=options.debug)
+ elf = ParseELF(realpath, options.root, options.prefix, ldpaths,
+ display=p, debug=options.debug)
except exceptions.ELFError as e:
if options.skip_non_elfs:
continue
next reply other threads:[~2014-07-30 8:22 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 8:22 Mike Frysinger (vapier) [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-11-20 1:22 [gentoo-commits] gentoo-projects commit in pax-utils: lddtree.py Mike Frysinger (vapier)
2014-11-20 1:17 Mike Frysinger (vapier)
2014-11-20 1:13 Mike Frysinger (vapier)
2014-08-01 2:20 Mike Frysinger (vapier)
2014-08-01 1:39 Mike Frysinger (vapier)
2014-07-30 14:35 Mike Frysinger (vapier)
2014-07-30 4:34 Mike Frysinger (vapier)
2014-07-30 4:28 Mike Frysinger (vapier)
2014-07-30 4:16 Mike Frysinger (vapier)
2014-07-30 4:07 Mike Frysinger (vapier)
2014-07-30 4:06 Mike Frysinger (vapier)
2014-03-20 8:25 Mike Frysinger (vapier)
2014-03-20 8:18 Mike Frysinger (vapier)
2013-04-23 2:16 Mike Frysinger (vapier)
2013-04-22 22:02 Mike Frysinger (vapier)
2013-04-22 18:31 Mike Frysinger (vapier)
2013-04-05 22:26 Mike Frysinger (vapier)
2013-04-03 4:51 Mike Frysinger (vapier)
2013-03-28 17:14 Mike Frysinger (vapier)
2013-03-28 1:17 Mike Frysinger (vapier)
2013-03-28 0:58 Mike Frysinger (vapier)
2013-03-27 3:22 Mike Frysinger (vapier)
2013-03-27 3:20 Mike Frysinger (vapier)
2013-03-27 3:20 Mike Frysinger (vapier)
2013-03-27 3:07 Mike Frysinger (vapier)
2013-03-26 5:22 Mike Frysinger (vapier)
2013-03-26 5:03 Mike Frysinger (vapier)
2013-03-26 4:50 Mike Frysinger (vapier)
2013-03-25 22:35 Mike Frysinger (vapier)
2013-03-24 5:37 Mike Frysinger (vapier)
2013-03-24 5:27 Mike Frysinger (vapier)
2013-03-23 7:28 Mike Frysinger (vapier)
2013-03-21 22:55 Mike Frysinger (vapier)
2013-03-21 3:04 Mike Frysinger (vapier)
2013-03-21 3:03 Mike Frysinger (vapier)
2013-01-05 20:39 Mike Frysinger (vapier)
2012-12-14 4:22 Mike Frysinger (vapier)
2012-11-26 20:06 Mike Frysinger (vapier)
2012-11-24 19:44 Mike Frysinger (vapier)
2012-11-24 17:01 Mike Frysinger (vapier)
2012-11-24 16:54 Mike Frysinger (vapier)
2012-11-17 0:11 Mike Frysinger (vapier)
2012-11-16 23:53 Mike Frysinger (vapier)
2012-11-15 20:39 Mike Frysinger (vapier)
2012-11-15 20:28 Mike Frysinger (vapier)
2012-11-15 20:26 Mike Frysinger (vapier)
2012-11-15 19:33 Mike Frysinger (vapier)
2012-11-13 5:10 Mike Frysinger (vapier)
2012-11-13 2:33 Mike Frysinger (vapier)
2012-11-12 23:08 Mike Frysinger (vapier)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140730082208.2CEB92004E@flycatcher.gentoo.org \
--to=vapier@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox