
    (g
                         d Z ddlZddlZddgZ G d de      Z G d d      Z G d d      Zed	k(  r e	 e              yy)
z-An object-oriented interface to .netrc files.    NnetrcNetrcParseErrorc                       e Zd ZdZddZd Zy)r   z5Exception raised on syntax errors in the .netrc file.Nc                 Z    || _         || _        || _        t        j	                  | |       y N)filenamelinenomsg	Exception__init__)selfr
   r   r	   s       /usr/lib/python3.12/netrc.pyr   zNetrcParseError.__init__   s'     4%    c                 T    | j                   d| j                  d| j                  dS )Nz (z, line ))r
   r   r	   )r   s    r   __str__zNetrcParseError.__str__   s    %)XXt}}dkkJJr   )NN)__name__
__module____qualname____doc__r   r    r   r   r   r   
   s    ?&Kr   c                   $    e Zd Zd Zd Zd Zd Zy)	_netrclexc                 <    d| _         || _        d| _        g | _        y )N   z
	 )r	   instream
whitespacepushback)r   fps     r   r   z_netrclex.__init__   s    #r   c                 p    | j                   j                  d      }|dk(  r| xj                  dz  c_        |S )Nr   
)r   readr	   )r   chs     r   
_read_charz_netrclex._read_char   s0    ]]":KK1K	r   c                    | j                   r| j                   j                  d      S d}t        | j                  d      }|D ]  }|| j                  v r|dk(  r-|D ]'  }|dk(  r|c c S |dk(  r| j                         }||z  }) D|dk(  r| j                         }||z  }|D ]0  }|| j                  v r|c c S |dk(  r| j                         }||z  }2  |S )Nr    "\)r   popiterr$   r   )r   tokenfiterr#   s       r   	get_tokenz_netrclex.get_token#   s    ====$$Q''T__b) 	 BT__$Sy  BSy$t!__.RKE  :*B  BT__,$t!__.RKE 	 ( r   c                 :    | j                   j                  |       y r   )r   append)r   r+   s     r   
push_tokenz_netrclex.push_token>   s    U#r   N)r   r   r   r   r$   r-   r0   r   r   r   r   r      s    6$r   r   c                   ,    e Zd ZddZd Zd Zd Zd Zy)r   Nc                    |d u }|=t         j                  j                  t         j                  j                  d      d      }i | _        i | _        	 t        |d      5 }| j                  |||       d d d        y # 1 sw Y   y xY w# t        $ r9 t        |d      5 }| j                  |||       d d d        Y y # 1 sw Y   Y y xY ww xY w)N~z.netrczutf-8)encodinglocale)	ospathjoin
expanduserhostsmacrosopen_parseUnicodeDecodeError)r   filedefault_netrcr   s       r   r   znetrc.__init__C   s    <77<< 2 23 7BD
	5dW- 5D"m45 5 5! 	5dX. 5"D"m45 5 5	5sH   B	  A=4B	 =BB	 B	 	CB=3C=C	CCc                    t        |      }	 |j                  }|j                         x}}|sy |d   dk(  r8|j                  |k(  r(t        |      dk(  r|j                  j                          b|dk(  r|j                         }n|dk(  rd}n|dk(  ry|j                         }g | j                  |<   	 |j                  j                         }	|	st        d||j                        |	dk(  rn| j                  |   j                  |	       Xt        d	|z  ||j                        |st        d
|z  ||j                        dx}
x}}i | j                  |<   	 |j                  }|j                         }|j                  d      r*|j                  |k(  r|j                  j                          X|dv r$|
||f| j                  |<   |j                  |       nb|dk(  s|dk(  r|j                         }
nF|dk(  r|j                         }n0|dk(  r|j                         }nt        d|z  ||j                        | j                  ||| j                  |   d          O)Nr   r   #machinedefaultmacdefz.Macro definition missing null line terminator.r!   zbad toplevel token %rzmissing %r namer&   >   r&   rE   rD   rC   loginuseraccountpasswordzbad follower token %r)r   r	   r-   lenr   readliner;   r   r/   r:   
startswithr0   _security_check)r   r?   r   r@   lexersaved_linenotopleveltt	entrynamelinerF   rH   rI   prev_linenos                 r   r=   znetrc._parseP   s[   " <<L!OO--HrA#<<</CGqLNN++-y!OO-	y%	x!OO-	)+I& >>224D-L %,,0 0 t| KK	*11$7  %+b0$F F %&7"&<dELLQQ *,+E+Gh$&DJJy!#ll__&==%||{2//1==-2GX,FDJJy)$$R(7]bFl!OO-E9_#oo/G:%$0H)*AB*F*.> >% (   ]DJJy4I!4LMy r   c                 x   t         j                  dk(  r|r|dk7  rt        j                  |j                               }|j                  t        j
                         k7  r\dd l}	 |j                  |j                        d   }	 |j                  t        j
                               d   }t        d| d| d      |j                  t        j                  t        j                  z  z  rt        d      y y y y # t        $ r d|j                  z  }Y w xY w# t        $ r dt        j
                         z  }Y w xY w)	Nposix	anonymousr   zuid %sz~/.netrc file owner (z, z) does not match current userzY~/.netrc access too permissive: access permissions must restrict access to only the owner)r6   namefstatfilenost_uidgetuidpwdgetpwuidKeyErrorr   st_modestatS_IRWXGS_IRWXO)r   r   r@   rF   propr]   fownerrG   s           r   rM   znetrc._security_check   s   77g-E[4H88BIIK(D{{biik)4 \\$++6q9F2<<		4Q7D &,VHBtf =% %' ' t|| ;<%!" " = 5I-   4%3F4   2#biik1D2s$   $C8 &D 8DD D98D9c                 x    || j                   v r| j                   |   S d| j                   v r| j                   d   S y)z8Return a (user, account, password) tuple for given host.rD   N)r:   )r   hosts     r   authenticatorsznetrc.authenticators   s;    4::::d##$**$::i((r   c                 J   d}| j                   j                         D ]=  }| j                   |   }|d| d|d    dz  }|d   r|d|d    dz  }|d|d	    dz  }? | j                  j                         D ])  }|d
| dz  }| j                  |   D ]  }||z  }	 |dz  }+ |S )z3Dump the class data in the format of a .netrc file.r&   zmachine z
	login r   r!   r   z		account z
	password    zmacdef )r:   keysr;   )r   reprg   attrsmacrorS   s         r   __repr__znetrc.__repr__   s    JJOO% 	.DJJt$EXdV:eAhZr::CQxE!H:R00[q
"--C	. [[%%' 	EWUG2&&CE* t4KC		
 
r   r   )r   r   r   r   r=   rM   rh   ro   r   r   r   r   r   B   s    5>N@",r   __main__)
r   r6   ra   __all__r   r   r   r   r   printr   r   r   <module>rs      sV    3 %
&	Ki 	K)$ )$X{ {z z	%'N r   