← Back to team overview

tieto team mailing list archive

[Bug 1390061] Re: bash-completion tilde expansion every time

 

Please check comment #12 and #13...
The patch debian/patches/00-fix_quote_readline_by_ref.patch is not from upstream so we do not have to forward this to Debian.

The proper fix for this is to remove the bad
debian/patches/00-fix_quote_readline_by_ref.patch patch but since it
took 1.5 years for someone to do anything about this I did not complain
when they just patched the bad patch instead of removing the bad patch.

With this fix we can use Ubuntu in an Enterprise environment and Debian
are not affected by this because the problem was caused by a Ubuntu
patch.

-- 
You received this bug notification because you are a member of Tieto,
which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1390061

Title:
  bash-completion tilde expansion every time

Status in bash-completion package in Ubuntu:
  Fix Released
Status in bash-completion source package in Trusty:
  Fix Released
Status in bash-completion source package in Wily:
  In Progress
Status in bash-completion source package in Xenial:
  Fix Committed

Bug description:
  [Impact]

  when authenticate AD, with bask-completion, it's very slow.

  [Testcase]

  Below command should output nothing.

  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep /etc/passwd
  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep sss

  but we have something

  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep /etc/passwd
  open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep sss
  open("/lib/i386-linux-gnu/libnss_sss.so.2", O_RDONLY|O_CLOEXEC) = 3
  open("/var/lib/sss/mc/passwd", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
  connect(4, {sa_family=AF_LOCAL, sun_path="/var/lib/sss/pipes/nss"}, 110) = 0

  [Regeression Potential]

  Regression possible about
  https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1288314

  but there is no problem with ~ completion in my test

  I thested ~/<Tab>/ ~/<Tab>/<Tab> with no problem

  [Other Info]

  This is not from upstream, no need to fix for upstream.
  But fix code seems harmless. just specify special character ~

  // The original description

  1) The release of Ubuntu you are using, via 'lsb_release -rd' or System -> About Ubuntu
  root@ubuntu1404:~# lsb_release -rd
  Description:    Ubuntu 14.04.1 LTS
  Release:        14.04

  2) The version of the package you are using, via 'apt-cache policy pkgname' or by checking in Software Center
  root@ubuntu1404:~# apt-cache policy bash-completion
  bash-completion:
    Installed: 1:2.1-4
    Candidate: 1:2.1-4
    Version table:
   *** 1:2.1-4 0
          500 http://se.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages
          100 /var/lib/dpkg/status

  3) What you expected to happen

  When I use bash-completion it should not read the /etc/passwd file or contact the Active directory.
  It is very hard to see this problem unless you run this on a machine with slow authentication... but the commands below will show if the /etc/passwd or sssd are used by bash_completion or not:

  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep /etc/passwd
  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep sss

  When the ~ are escaped on line 545 and 547 in /usr/share/bash-
  completion/bash_completion then bash_completion works as expected.

  4) What happened instead

  Every time you use tab-completion in bash on ubuntu 14.04 it will read
  the /etc/passwd file and if sssd are installed and configured for
  Active Directory authentication it will talk to sssd... and this can
  be slow in some environments.

  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep /etc/passwd
  open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
  root@ubuntu1404:~# strace bash -c ". /etc/bash_completion; quote_readline '/something'; echo" 2>&1 | grep sss
  open("/lib/i386-linux-gnu/libnss_sss.so.2", O_RDONLY|O_CLOEXEC) = 3
  open("/var/lib/sss/mc/passwd", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
  connect(4, {sa_family=AF_LOCAL, sun_path="/var/lib/sss/pipes/nss"}, 110) = 0

  I have made a small patch for this problem and I have not found any side effects:
  --- /usr/share/bash-completion/bash_completion.orig     2014-11-06 10:36:14.981888369 +0100
  +++ /usr/share/bash-completion/bash_completion  2014-11-06 10:36:25.142070963 +0100
  @@ -542,9 +542,9 @@
       elif [[ $1 == \'* ]]; then
           # Leave out first character
           printf -v $2 %s "${1:1}"
  -    elif [[ $1 == ~* ]]; then
  +    elif [[ $1 == \~* ]]; then
           # avoid escaping first ~
  -        printf -v $2 ~%q "${1:1}"
  +        printf -v $2 \~%q "${1:1}"
       else
           printf -v $2 %q "$1"
       fi

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/bash-completion/+bug/1390061/+subscriptions