Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

some commands fail when the current directory's path includes spaces #135

Open
MichaelPeter-Shockoe opened this issue Mar 14, 2018 · 20 comments
Assignees
Labels
Milestone

Comments

@MichaelPeter-Shockoe
Copy link

Some commands, specifically at least git secret init and git secret reveal, encounter errors when the current directory's path contains any spaces. I personally avoid using spaces in directory names, but I am attempting to set up git-secret with our CI server and must work around the existing structure there.

What are the steps to reproduce this issue?

In place of the suggested sections, I will provide two full examples which I hope will show the issue clearly.

Note: both of these examples take place on a machine on which I am able to use git-secret without issue when the path does not contain a space

Example 1 - Initializing to a directory which contains a space

Here is the base case where I try to set up git-secret from scratch in a directory which already contains a space in the path
screen shot 2018-03-14 at 10 17 04 am

Example 2 - Calling git secret reveal from a directory which contains a space

Here, I first initialize git-secret and encrypt a file successfully in a directory with no spaces in the path so that I can get further along in the process. I then rename the directory to contain a space and try to call git secret reveal
screen shot 2018-03-14 at 10 19 47 am

Any other comments?

I inserted some logging and played with the code a bit, and I believe the issue is stemming from lines of the form

$($gpg_local ......)

A little research pointed me towards the use of eval for better interpretation of commands formed by concatenating strings, but I am not sure of the security implications around that command.

What versions of software are you using?

Operating system: macOS 10.13.3

Darwin -- 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64

git-secret path: /usr/local/bin/git-secret

git-secret version: 0.2.2

git version: 2.11.1

Shell type and version: zsh 5.3 (x86_64-apple-darwin17.0)

gpg version: 2.2.5

@sobolevn
Copy link
Owner

@MichaelPeter-Shockoe Thanks for the detailed report.

Are you interested in providing a fix?

@MichaelPeter-Shockoe
Copy link
Author

No problem. Unfortunately I don't have the bandwidth to commit time towards a fix right now though

@sobolevn
Copy link
Owner

@joshrabinowitz Could you please verify that this is still an issue?

@sobolevn sobolevn added this to the 0.2.4 milestone Apr 17, 2018
@joshrabinowitz
Copy link
Collaborator

joshrabinowitz commented Apr 18, 2018

@sobolevn it is still an issue.

I see these issues so far:

@joshrabinowitz
Copy link
Collaborator

And here's the first error you'll encounter if you try to create a git-secret repo using a directory with spaces

% git clone [email protected]:repo.git 'checkout repo'

% cd 'checkout repo'

% git secret init
'/full/path/checkout repo/.gitsecret/' created.
gawk: cmd. line:3: fatal: cannot open file `/full/path/checkout' for reading (No such file or directory)
cleaning up...

@joshrabinowitz
Copy link
Collaborator

Can anyone provide tips fixing these issues? Not a bash master here (yet)

@sobolevn
Copy link
Owner

@joshrabinowitz you have to look for expression expansion issues. It generally means that we are missing "" quotes somewhere. Or something similar.

@joshrabinowitz
Copy link
Collaborator

Yeah, I've tried all sorts of quoting changes so far, I could use some specific guidance

@joshrabinowitz
Copy link
Collaborator

@joshrabinowitz
Copy link
Collaborator

joshrabinowitz commented May 14, 2018

Relevant:

http://mywiki.wooledge.org/Quotes

http://mywiki.wooledge.org/BashFAQ/050#I_only_want_to_pass_options_if_the_runtime_data_needs_them

  • "You can use the ${var:+..} parameter expansion" (to build options at runtime)

I'm pretty sure this is extra important:

"rewrite the _get_gpg_local function to put those default arguments 
or whatever into an array instead. the way it is now it'll never work."- person on IRC

https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md

https://google.github.io/styleguide/shell.xml

@khromov
Copy link

khromov commented May 30, 2018

Also affected by this. 😢

@joshrabinowitz
Copy link
Collaborator

I think we should release 0.2.4 without this fix (since we don't have the fix yet).

@joshrabinowitz
Copy link
Collaborator

This is fixed by PR #224, which should be in the next release

@sobolevn
Copy link
Owner

sobolevn commented Jul 3, 2018

@joshrabinowitz thank you for your hard work! I know this was a challenging one.
Awesome, that we got this fixed!

@joshrabinowitz
Copy link
Collaborator

@sobolevn you're quite welcome! Thanks for all your time and work writing and supporting git-secret.

@k-le
Copy link

k-le commented Aug 7, 2022

Hi all! I just encountered this issue again, today, 08/07/22, after running git secret init.

Here's the terminal output:

myUser repo % git secret init
git-secret: init created: '/Users/myUser/GitLab Repos/Personal/repo/.gitsecret/'
gawk: cmd. line:3: fatal: cannot open file `/Users/myUser/GitLab' for reading: No such file or directory

I don't have a fix for this but just wanted to post that it's an issue that I am encountering again.

@joshrabinowitz
Copy link
Collaborator

joshrabinowitz commented Aug 7, 2022

confirmed regression on current master branch.
current automated testing asserts that using spaces with files works,
but we don't test the case when a parent directory contains spaces.

@joshrabinowitz
Copy link
Collaborator

joshrabinowitz commented Aug 7, 2022

Even though I closed this ticket some time ago, I don't think this actually was ever fixed for the case of spaces in parent directories (we did fix the case of spaces in filenames and directories in the git-secret repo).

I'm not sure how to fix the underlying problem which is an issue with quoting in the gawk code

@joshrabinowitz
Copy link
Collaborator

joshrabinowitz commented Sep 5, 2022

This is because (at the very least) the gawk scripts used in git-secret can't handle spaces in parent directory names.

To replicate:

mkdir 'test with space'

cd 'test with space'

git init
Initialized empty Git repository in /home/user/gitsrc/test with space/.git/

git secret init 
git-secret: init created: '/home/user/gitsrc/test with space/.gitsecret/'
gawk: cmd. line:3: fatal: cannot open file `/home/user/gitsrc/test' for reading (No such file or directory)

Note how it truncates the directory name at the first space

@joshrabinowitz
Copy link
Collaborator

@hurricanehrndz it looks like you're the original author of the awk code that git-secret depends on and is causing issues here.
Can you possibly take a look and fix?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants