Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 475d51d

Browse files
committed
Wrapped up the ~/.netrc support. This is basically just the changes Guido &
I discussed to the original version way-back-when.
1 parent dd52733 commit 475d51d

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

Lib/ftplib.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -543,10 +543,12 @@ def ftpcp(source, sourcename, target, targetname = '', type = 'I'):
543543
target.voidresp()
544544

545545

546-
NoFileSpecified = "netrc.NoFileSpecified"
546+
class Netrc:
547+
"""Class to parse & provide access to 'netrc' format files.
547548
549+
See the netrc(4) man page for information on the file format.
548550
549-
class Netrc:
551+
"""
550552
__defuser = None
551553
__defpasswd = None
552554
__defacct = None
@@ -556,7 +558,7 @@ def __init__(self, filename=None):
556558
if os.environ.has_key("HOME"):
557559
filename = os.path.join(os.environ["HOME"], ".netrc")
558560
else:
559-
raise NoFileSpecified, "specify file to load or set $HOME"
561+
raise IOError, "specify file to load or set $HOME"
560562
self.__hosts = {}
561563
self.__macros = {}
562564
fp = open(filename, "r")
@@ -625,7 +627,7 @@ def get_account(self, host):
625627
626628
"""
627629
host = string.lower(host)
628-
user, passwd, acct = None, None, None
630+
user = passwd = acct = None
629631
if self.__hosts.has_key(host):
630632
user, passwd, acct = self.__hosts[host]
631633
user = user or self.__defuser
@@ -641,19 +643,38 @@ def get_macro(self, macro):
641643
"""Return a sequence of lines which define a named macro."""
642644
return self.__macros[macro]
643645

646+
644647

645648
def test():
646649
'''Test program.
647-
Usage: ftp [-d] host [-l[dir]] [-d[dir]] [-p] [file] ...'''
650+
Usage: ftp [-d] [-r[file]] host [-l[dir]] [-d[dir]] [-p] [file] ...'''
648651

649652
debugging = 0
653+
rcfile = None
650654
while sys.argv[1] == '-d':
651655
debugging = debugging+1
652656
del sys.argv[1]
657+
if sys.argv[1][:2] == '-r':
658+
# get name of alternate ~/.netrc file:
659+
rcfile = sys.argv[1][2:]
660+
del sys.argv[1]
653661
host = sys.argv[1]
654662
ftp = FTP(host)
655663
ftp.set_debuglevel(debugging)
656-
ftp.login()
664+
userid = passwd = acct = ''
665+
try:
666+
netrc = Netrc(rcfile)
667+
except IOError:
668+
if rcfile is not None:
669+
sys.stderr.write("Could not open account file"
670+
" -- using anonymous login.")
671+
else:
672+
try:
673+
userid, passwd, acct = netrc.get_account(host)
674+
except KeyError:
675+
# no account for host
676+
sys.stderr.write("No account -- using anonymous login.")
677+
ftp.login(userid, passwd, acct)
657678
for file in sys.argv[2:]:
658679
if file[:2] == '-l':
659680
ftp.dir(file[2:])

0 commit comments

Comments
 (0)