a DOg@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/lib64/python3.9/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) rNcCsl|du}|dur&tjtjdd}i|_i|_t|}||||Wdn1s^0YdS)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 vrr| rR| | | f|j |<||q(nt d||t|f||jq|dks|dkr|} q|dkr|} q|dkrtjdkr|rt|} | jtkrlddl}z|| jd}Wntyd| j}Yn0z|td}Wn tyTdt}Yn0t 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_tokenlenZinstreamreadliner whitespaceappendrr startswithZ push_tokenreprrnamefstatfilenost_uidgetuidpwdgetpwuidKeyErrorst_modestatS_IRWXGS_IRWXO)r rrrZlexerZ saved_linenoZtoplevelttZ entrynameliner$r&r'Zpropr6Zfownerr%r r r r s                  z netrc._parsecCs0||jvr|j|Sd|jvr(|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?attrsZmacror>r r r __repr__zs   znetrc.__repr__)N)r rrrrr@rDr r r r rs Q __main__) rrr)r:__all__rrrr printr r r r s  t