[Bug 1585696] Re: command-not-found clashes with local python3 in path

Andy Whitcroft apw at canonical.com
Mon Jun 20 16:53:13 UTC 2016


Hello Ryan, or anyone else affected,

Accepted command-not-found into xenial-proposed. The package will build
now and be available at https://launchpad.net/ubuntu/+source/command-
not-found/0.3ubuntu16.04.2 in a few hours, and then in the -proposed
repository.

Please help us by testing this new package.  See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to
enable and use -proposed.  Your feedback will aid us getting this update
out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested, and change the tag
from verification-needed to verification-done. If it does not fix the
bug for you, please add a comment stating that, and change the tag to
verification-failed.  In either case, details of your testing will help
us make a better decision.

Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification .  Thank you in
advance!

** Changed in: command-not-found (Ubuntu Xenial)
       Status: In Progress => Fix Committed

** Tags added: verification-needed

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to command-not-found in Ubuntu.
https://bugs.launchpad.net/bugs/1585696

Title:
  command-not-found clashes with local python3 in path

Status in command-not-found package in Ubuntu:
  Fix Released
Status in command-not-found source package in Xenial:
  Fix Committed

Bug description:
  In Ubuntu 14.04 (and Linux Mint 17), /etc/bash.bashrc handles "command
  not found" with the function command_not_found_handle, which contains
  the line:

  /usr/bin/python /usr/lib/command-not-found -- $1

  However, /usr/lib/command-not-found was rewritten for Python 3. To
  handle this, /usr/lib/command-not-found has (lines 17-22):

  if sys.version < '3':
      # We might end up being executed with Python 2 due to an old
      # /etc/bash.bashrc.
      import os
      if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
          os.execvp("python3", [sys.argv[0]] + sys.argv)

  This catches old versions of python and re-runs command-not-found with
  python3 from the path. If a local version of Python (such as Anaconda)
  is installed, command-not-found will try to execute with the local
  python3 and gives:

  Could not find platform independent libraries <prefix>
  Could not find platform dependent libraries <exec_prefix>
  Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
  Fatal Python error: Py_Initialize: Unable to get the locale encoding
  ImportError: No module named 'encodings'

  Current thread 0x00007f04862de740 (most recent call first):
  Aborted

  This can be solved by replacing line 22 of /usr/lib/command-not-found
  with:

  os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)

  Searching for "os.execvp", it doesn't appear that the same error
  occurs for any other scripts in /usr/lib/. Any script using os.execvp
  with the correct permissions is a potential security vulnerability if
  the path is changed to contain a malicious script under the correct
  name. Fortunately this is not the case for command-not-found.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/command-not-found/+bug/1585696/+subscriptions



More information about the foundations-bugs mailing list