U kg@sXdZddlZddlZddlZddgZGdddeZGdddZedkrTe edS)z-An object-oriented interface to .netrc files.NnetrcNetrcParseErrorc@s"eZdZdZdddZddZdS)rz5Exception raised on syntax errors in the .netrc file.NcCs"||_||_||_t||dS)N)filenamelinenomsg Exception__init__)selfrrrr /usr/lib/python3.8/netrc.pyr szNetrcParseError.__init__cCsd|j|j|jfS)Nz%s (%s, line %s))rrr)r r r r __str__szNetrcParseError.__str__)NN)__name__ __module__ __qualname____doc__rr r r r r r s c@s.eZdZd ddZddZddZdd ZdS) rNc CsX|dk}|dkr&tjtjdd}i|_i|_t|}||||W5QRXdS)N~z.netrc)ospathjoin expanduserhostsmacrosopen_parse)r file default_netrcfpr r r rs znetrc.__init__cCst|}|jd7_|jdd|_|j}|}}|sDqn|ddkrt|j|kr(t|dkr(|jq(n|dkr|}nt|dkrd}nf|dkr|}g|j |<d |_ |j} | r| d krd |_ q(|j | | qq(nt d |||jd} d} } i|j |<|}|ds.|d krr| rR| | | f|j |<||q(nt d||t|f||jq|dks|dkr|} q|dkr|} q|dkrtjdkr|rt|} | jtkrpddl}z|| jd}Wn tk rd| j}YnXz|td}Wn"tk rXdt}YnXt d||f||j| jtjtjB@rt d||j|} nt d|||jqq(dS)Nz !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~#rmachinedefaultmacdefz  z zbad toplevel token %r>rr r"r!z&malformed %s entry %s terminated by %sloginuseraccountpasswordposixzuid %sz9~/.netrc file owner (%s) does not match current user (%s)zY~/.netrc access too permissive: access permissions must restrict access to only the ownerzbad follower token %r)shlexZ wordcharsZ commentersreplacerZ get_tokenlenZinstreamreadlinerZ whitespaceappendrr startswithZ push_tokenreprrnamefstatfilenost_uidgetuidpwdgetpwuidKeyErrorst_modestatS_IRWXGS_IRWXO)r rrrZlexerZ saved_linenoZtoplevelZttZ entrynameliner$r&r'Zpropr5Zfownerr%r r r r s                 z netrc._parsecCs0||jkr|j|Sd|jkr(|jdSdSdS)z8Return a (user, account, password) tuple for given host.r!N)r)r hostr r r authenticatorsqs     znetrc.authenticatorscCsd}|jD]X}|j|}|d|d|dd7}|drR|d|dd7}|d|d d7}q|jD]4}|d |d7}|j|D] }||7}q|d7}qr|S) z3Dump the class data in the format of a .netrc file.rzmachine z login rr#rz account z password zmacdef )rkeysr)r Zrepr=ZattrsZmacror<r r r __repr__zs   znetrc.__repr__)N)r rrrrr>rAr r r r rs Q __main__) rrr)r9__all__rrrr printr r r r s  t