[pass] Problems with ‘pass grep’ and symbolic links

Allan Odgaard lists+pass at simplit.com
Mon Jul 7 10:29:46 CEST 2014


Thanks for the POSIX pointer Matthew.

Makes me think a safer workaround would be to use "${PREFIX}/.".

Still feels a bit hacky and we’d also need to account for this prefix 
when creating the shorter display path.

So I’m thinking using -L is the best option. My proposed change is 
below.

There is another call to ‘find’ related to re-encrypting the 
password storage, I don’t know if it’s necessary to use -L there 
(the argument to ‘find’ is not as straightfoward as in the grep 
version).

--- pass (saved version)
+++ (current document)
@@ -360,7 +360,7 @@
  		passfile="${passfile##*/}"
  		printf "\e[94m%s/\e[1m%s\e[0m:\n" "$passfile_dir" "$passfile"
  		echo "$grepresults"
-	done < <(find "$PREFIX" -iname '*.gpg' -print0)
+	done < <(find -L "$PREFIX" -iname '*.gpg' -print0)
  }

  cmd_insert() {



On 4 Jul 2014, at 4:28, Matthew Cengia wrote:

> On 2014-07-03 19:12, Allan Odgaard wrote:
>> My ~/.password-store is a symbolic link pointing to a shared folder.
>>
>> The ‘pass grep’ command fails in this scenario since ‘find’ 
>> does not
>> traverse symbolic links by default.
>>
>> To support this setup one can use the ‘-L’ option when calling
>> ‘find’.
>>
>> By experimentation I have discovered that ending the search path
>> with a slash, e.g. "${PREFIX}/", will also make it work. But I do
>> not see this documented, so it’s probably not something that we
>> should rely on (unless someone can point to where it’s documentated
>> as standard behavior).
>
> I'm quite confident that the behaviour you're seeing with the trailing
> slash is part of POSIX, but I'm not positive. Here's what I think is 
> the
> most relevent part of the POSIX standard[1]:
>
>> An earlier version of this standard required that a pathname with a
>> trailing <slash> character be treated as if it had a trailing "/."
>> everywhere. This specification was ambiguous. In situations where the
>> intent was that the application wanted to require the implementation
>> to accept the pathname only if it named a directory (existing or to 
>> be
>> created as a result of the call performing pathname resolution),
>> literally adding a '.' after the trailing <slash> could be 
>> interpreted
>> to require use of that pathname to fail. Some of the uses that 
>> created
>> ambiguous requirements included mkdir("newdir/") and
>> rmdir("existing-dir/"). POSIX.1-2008 requires that a pathname with a
>> trailing <slash> be rejected unless it refers to a file that is a
>> directory or to a file that is to be created as a directory. The
>> rename() function and the mv utility further specify that a trailing
>> <slash> cannot be used on a pathname naming a file that does not 
>> exist
>> when used as the last argument to rename() or renameat(), or as the
>> last operand to mv.
>
> There are other surrounding paragraphs that may also be relevent.
>
> 1.  
> http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_12
>
>
> -- 
> Regards,
> Matthew Cengia


More information about the Password-Store mailing list