@@ -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
645648def 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