netrc and password containing whitespace

Lele Gaifax lele at metapensiero.it
Thu Mar 24 06:14:31 EDT 2016


Hi all,

I tried to insert an entry in my ~/.netrc for an account having a password
that contains a space, something like:

  machine my-host-name login myname password "My Password"

The standard library netrc module does not seem able to parse it, raising a
NetrcParseError. Other programs (Emacs, to mention one) do the right thing
with an entry like that.

Inspecting the module, I see that it explicitly put the quote chars (both
single and double, that is '"' and "'") in the shlex-based lexer's wordchars:

  def _parse(self, file, fp, default_netrc):
       lexer = shlex.shlex(fp)
       lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
       lexer.commenters = lexer.commenters.replace('#', '')
       ...
       
Since the method read_token() state machine gives higher priority to wordchars
over quotes, it obviously cannot parse the quoted string correctly:

  ...
  elif self.posix and nextchar in self.escape:
      escapedstate = 'a'
      self.state = nextchar
  elif nextchar in self.wordchars:
      self.token = nextchar
      self.state = 'a'
  elif nextchar in self.quotes:
      if not self.posix:
          self.token = nextchar
      self.state = nextchar
  ...

I was not able to lookup an exact definition of netrc's syntax, so I wonder:
is the implementation somewhat flawed, or am I missing something?

Thanks in advance for any hint,
ciao, lele.
-- 
nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri
real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia.
lele at metapensiero.it  |                 -- Fortunato Depero, 1929.




More information about the Python-list mailing list