The problem does not come from upstream... it it caused by a patch created by canonical. debian/patches/00-fix_quote_readline_by_ref.patch:
From: JuanJo Ciarlante <[email protected]> Subject: fix _quote_readline_by_ref to: - avoid escaping 1st '~' (lp: #1288314) - avoid quoting if empty, else expansion without args only shows dirs (lp: #1288031) - replace double escaping to single (eg for completing file/paths with spaces) Origin: vendor, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739835 Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739835 Forwarded: yes, <[email protected]> --- bash_completion | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) --- bash-completion.orig/bash_completion +++ bash-completion/bash_completion @@ -536,13 +536,24 @@ __ltrim_colon_completions() # @param $2 Name of variable to return result to _quote_readline_by_ref() { - if [[ $1 == \'* ]]; then + if [ -z "$1" ]; then + # avoid quoting if empty + printf -v $2 %s "$1" + elif [[ $1 == \'* ]]; then # Leave out first character printf -v $2 %s "${1:1}" + elif [[ $1 == ~* ]]; then + # avoid escaping first ~ + printf -v $2 ~%q "${1:1}" else printf -v $2 %q "$1" fi + # Replace double escaping ( \\ ) by single ( \ ) + # This happens always when argument is already escaped at cmdline, + # and passed to this function as e.g.: file\ with\ spaces + [[ ${!2} == *\\* ]] && printf -v $2 %s "${1//\\\\/\\}" + # If result becomes quoted like this: $'string', re-evaluate in order to # drop the additional quoting. See also: http://www.mail-archive.com/ # [email protected]/msg01942.html ** Bug watch added: Debian Bug tracker #739835 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739835 -- 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: Confirmed Bug 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 -- Mailing list: https://launchpad.net/~tieto Post to : [email protected] Unsubscribe : https://launchpad.net/~tieto More help : https://help.launchpad.net/ListHelp

