--- netrc-2.6.py 2012-06-09 11:30:13.688554000 +0200 +++ netrc.py 2012-06-09 11:13:30.862460000 +0200 @@ -2,13 +2,13 @@ # Module and documentation by Eric S. Raymond, 21 Dec 1998 -import os, shlex +import os, stat, shlex __all__ = ["netrc", "NetrcParseError"] class NetrcParseError(Exception): - """Exception raised on syntax errors in the .netrc file.""" + """Exception raised on errors in the .netrc file.""" def __init__(self, msg, filename=None, lineno=None): self.filename = filename self.lineno = lineno @@ -16,7 +16,10 @@ Exception.__init__(self, msg) def __str__(self): - return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno) + if self.lineno is None : + return "%s (%s)" % (self.msg, self.filename) + else: + return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno) class netrc: @@ -27,6 +30,14 @@ except KeyError: raise IOError("Could not find .netrc: $HOME is not set") fp = open(file) + prop = os.fstat(fp.fileno()) + if os.name == 'posix': + if prop.st_uid != os.getuid(): + raise NetrcParseError( + ".netrc file owned by somebody else (%d)" % prop.st_uid, file) + if (prop.st_mode & (stat.S_IRWXG | stat.S_IRWXO)): + raise NetrcParseError( + ".netrc file : incorrect mode", file) self.hosts = {} self.macros = {} lexer = shlex.shlex(fp)