+
     hH  c            
       sn   ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ R	IH
t
 ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^t^t^	t^t^t^t^t^t^t^t^t ^ t!^t"^t#^t$^t%^t&^t'Rt(^t)^t*^t+^t,^t-^t.^t/^t0^t1^t2^t3^t4^t5^t6^t7^t8^t9^t:^t;^t<Rt=^ t>^t?^t@^tA^tB^tC^tD^	tE^
tF^tGR!tH ! R R]4      tI ! R R]4      tJ ! R R]4      tK]! ]]]! ]! ]J4      4      ]! ]! ]K4      4      ]4      tLR R ltM ! R R]4      tN ! R  R4      tOR# )"    N)cdll)	CFUNCTYPE)CDLL)POINTER)	Structure)byref)cast)sizeof)	py_object)c_char)c_char_p)c_int)c_size_t)c_void_p)memmove)find_library)Unioni   @i   PamAuthenticatorc                   sF   a a ] tR t^\t oRtR]3.tV 3R ltR tRt	Vt
V ;t# )	PamHandlez&wrapper class for pam_handle_t pointerhandlec                s2   < \         SV `  4        ^ V n        R# )r    N)Zsuper__init__r   )self	__class__s   &4/usr/lib/python3.14/site-packages/pam/__internals.pyr   ZPamHandle.__init__`   s        c                s"    R V P                    R2# )z<PamHandle Z>r   r      &r   __repr__ZPamHandle.__repr__d   s    T[[M++r   r   )__name__
__module____qualname____firstlineno____doc__r   _fields_r   r   __static_attributes____classdictcell__Z__classcell__)r   __classdict__s   @@r   r   r   \   s$     08$%H, ,r   r   c                   s:   a  ] tR t^ht o RtR]3R]3.tR tRt	V t
R# )
PamMessagez'wrapper class for pam_message structure	msg_stylemsgc                @    R V P                   V P                  3,          # )z$<PamMessage style: %i, content: %s >)r(   r)   r   r   r   r   ZPamMessage.__repr__l   s    58RRRr    N)r   r   r    r!   r"   r   r   r#   r   r$   r%   r&      @r   r'   r'   h   s(     1e$uh&78HS Sr   r'   c                   s:   a  ] tR t^pt o RtR]3R]3.tR tRt	V t
R# )PamResponsez(wrapper class for pam_response structurerespresp_retcodec                r*   )z$<PamResponse code: %i, content: %s >)r0   r/   r   r   r   r   ZPamResponse.__repr__t   s    59J9JDII8VVVr   r+   N)r   r   r    r!   r"   r   r   r#   r   r$   r%   r,   r-   r   r.   r.   p   s(     2"^U$;<HW Wr   r.   c                s<    V ^8  d   QhR\         R\        R\        /# )i   msg_listpasswordencoding)Zlistbytesstr)formats   "r   __annotate__r7      s"     ' 'd 'e '_b 'r   c                s   VP                   p\        Vn        \        \        .Vn        \        V4      p V! V \        \        4      4      p	\        V	\        \        4      4      p
W^ &   \        V 4       F  pW,          P                  P                  p\        P                  R8  d   VP                  V4      pVP!                  V4       W,          P                  P"                  \$        8X  g   K}  V^ 8X  dJ   V! \'        V4      ^,           \        \(        4      4      p\+        W\'        V4      4       WV,          n        MRW,          n        ^ W,          n        K  	  \0        # )ziSimple conversation function that responds to any
prompt where the echo is off with the supplied passwordNi   )callocr   restyper   argtypesr   r   r.   r   r   ZrangeZcontentsr)   sysversion_infodecodeZappendr(   PAM_PROMPT_ECHO_OFFZlenr
   r   r/   r0   PAM_SUCCESS)
n_messagesmessages
p_responselibcr1   r2   r3   r9   Z	cpasswordZaddrZresponseZiZmessageZdsts   &&&&&&&       r   my_convrE      s    [[FFN*FO"I *f[12DD'+./HqM:+&&**t#nnX.G ;))-@@AvS]1_fVn=H6#&  $( '(HK$! $ r   c                   s*    ] tR t^tRtR]3R]3.tRtR# )PamConvz$wrapper class for pam_conv structureconvZappdata_ptrr+   N)	r   r   r    r!   r"   	conv_funcr   r#   r$   r+   r   r   rF   rF      s    .#mX%>?Hr   rF   c                   sz   a  ] tR t^t o ^ tRtR tRR ltR tRR lt	RR lt
RR ltRR ltRR	 ltRR
 ltRtV tR# )r   Nc                s   \         P                  ! R 4      pWn        \        \	        R4      4      p\        \	        R4      4      pR V n        . V n        VP                  V n        \        V P                  n	        \        \        .V P                  n        \        VR4      '       dB   VP                  V n        \        V P                  n	        \        \        .V P                  n        VP                   V n        \        V P                   n	        \"        \"        \%        \&        4      \%        \        4      .V P                   n        VP(                  V n        \        V P(                  n	        \        \        .V P(                  n        VP*                  V n        \        V P*                  n	        \        \        \        .V P*                  n        VP,                  V n        VP.                  V n        \"        V P.                  n	        \        \        .V P.                  n        VP0                  V n        \        V P0                  n	        \        \        .V P0                  n        VP2                  V n        \        V P2                  n	        \        \        .V P2                  n        VP4                  V n        \        V P4                  n	        \        \        .V P4                  n        VP6                  V n        \        V P6                  n	        \        \"        .V P6                  n        VP8                  '       dL   VP:                  V n        \        V P:                  n	        \        \"        \"        \        .V P:                  n        VP<                  V n        \"        V P<                  n	        \        \"        .V P<                  n        VP>                  V n        \%        \"        4      V P>                  n	        \        .V P>                  n        R # )NZpamZpam_miscpam_end) r   ZLoadLibraryrD   r   r   r   rB   r9   r   r:   r   r;   hasattrrI   r   r   	pam_startr   r   rF   pam_acct_mgmtpam_set_itempam_setcredpam_strerrorpam_authenticatepam_open_sessionpam_close_session
pam_putenvZ_namepam_misc_setenv
pam_getenvpam_getenvlist)r   rD   ZlibpamZlibpam_miscs   &   r   r   ZPamAuthenticator.__init__   s    %	l5)*<
34kk& ((3 69%%!>>DL#(DLL %.$6DLL!))!&#+Xww7G#*9#5#7 $11%*"'0%&8#"//$)!&/%A"!--"//$,!&/%7" & 7 7(-%*3U);& & 7 7(-%*3U);&!'!9!9).&+4e*<' ++"'$-x#8 #.#>#>D +0D  (-6(-2-4D  ) !++"*$-x#8 $33&-h&7#(1{$r   c	                sr  a  \         V 3R l4       p	\        V\        4      '       d   VP                  V4      p\        V\        4      '       d   VP                  V4      p\        V\        4      '       d   VP                  V4      pRV9   g   RV9   g   RV9   d(   \        S n        RS n        \        S P                  4      hRS P                  RVRV/p
\        V	\        P                  ! \        V
4      4      4      p\        4       S n        S P                  W1\!        V4      \!        S P                  4      4      pV\"        8w  d2   VS n        RS P%                  S P                  V4      ,          S n        R# \&        P(                  P+                  R	4      pV'       g3   \&        P,                  ! ^ 4      '       d   \&        P.                  ! ^ 4      pV'       d]   \1        VP                  V4      4      pS P3                  S P                  \4        V4      pS P3                  S P                  \6        V4      pV'       d   \        V\8        4      '       g   \;        R
4      hVP=                  4        Fz  w  pp\        V\>        4      '       d   RV9   d   \        R4      h\        V\>        4      '       d   RV9   d   \        R4      hRPA                  VV4      pS PC                  VV4      pK|  	  S PE                  S P                  ^ 4      pV\"        8X  d   S PG                  S P                  ^ 4      pV\"        8X  d)   V'       d!   S PI                  S P                  \J        4      pVS n        S P%                  S P                  V4      S n        \L        PN                  R8  d!   S P                  PQ                  V4      S n        V'       d6   \S        S R4      '       d$   S PU                  S P                  V4       RS n        V'       d.   S P
                  \"        8w  d   \W        RS P                   24       V\"        8H  # )a  username and password authentication for the given service.

Returns True for success, or False for failure.

self.code (integer) and self.reason (string) are always stored and may
be referenced for the reason why authentication failed. 0/'Success'
will be stored for success.

Python3 expects bytes() for ctypes inputs.  This function will make
necessary conversions using the supplied encoding.

Args:
  username (str): username to authenticate
  password (str): password in plain text
  service (str):  PAM service to authenticate against, defaults to 'login'
  env (dict):      Pam environment variables
  call_end (bool): call the pam_end() function after (default true)
  print_failure_messages (bool): Print messages on failure

Returns:
  success:  PAM_SUCCESS
  failure:  False
c           	      s   < \        V\        4      P                  pVP                  R 4      pVP                  R4      pVP                  R4      p\	        WVSP
                  WVV4      # )msgsr2   r3   )r   r	   valuegetrE   rD   )	rA   rB   rC   app_dataZpyobr1   r2   r3   r   s	   &&&&    r   Z__convZ-PamAuthenticator.authenticate.<locals>.__conv   sW    ),22Dxx'Hxx
+Hxx
+H:TYY\deer   s    z6none of username, password, or service may contain NULrW   r2   r3   zpam_start() failed: %sFZDISPLAYz"env" must be a dictz "env{}" key cannot contain NULLsz""env{}" value cannot contain NULLsz{}={}rI   Nz	Failure: r8   ),rH   
isinstancer5   encodePAM_SYSTEM_ERRcodereason
ValueErrorrB   rF   r   Zfrom_bufferr	   r   r   rK   r   r@   rO   osZenvironrY   ZisattyZttynamer   rM   PAM_TTYPAM_XDISPLAYZdictZ	TypeErrorZitemsr4   r6   putenvrP   rL   rN   PAM_REINITIALIZE_CREDr<   r=   r>   rJ   rI   Zprint)r   Zusernamer2   ZserviceZenvZcall_endr3   Z
resetcredsZprint_failure_messagesZ_PamAuthenticator__convrZ   rG   retvalZcttyZctty_pkeyrX   
name_valueZauth_successs   f&&&&&&&&          r   authenticateZPamAuthenticator.authenticate   s1   F 
	f 
	f h$$x0Hh$$x0Hgs##nnX.Gh'X"5G9K&DI"DKT[[)) DMM:xXVvx33Ih4GHIk5; %dkk 24 [  DI3,,T[[&ABDK  zz~~i(		!::a=D dkk(34F&&t{{GVDF&&t{{L&IF c4(( 677!iik
Uc5))gn$%GHHeU++50@$%IJJ$^^C7
Z: * ,,T[[!<;&--dkk1=L;&:++DKK9NOL !	''\Bt#++,,X6DKi00LLl3DK!dii;&>Idkk]+,{**r   c                s    V P                   '       d   \        V R4      '       g   \        # V P                  V P                   V P                  4      pRV n         V# )zDA direct call to pam_end()
Returns:
  Linux-PAM return value as int
rI   N)r   rJ   r]   rI   r^   )r   rf   s   & r   endZPamAuthenticator.end  sC    
 {{{'$	":":!!dkk4995r   c                &   V P                   '       g   \        # V P                  V P                   ^ 4      pW n        V P	                  V P                   V4      V n        \        P                  R8  d!   V P
                  P                  V4      V n        V# )zZCall pam_open_session as required by the pam_api
Returns:
  Linux-PAM return value as int
r8   )	r   r]   rQ   r^   rO   r_   r<   r=   r>   r   r3   rf      && r   open_sessionZPamAuthenticator.open_session  so    
 {{{!!&&t{{A6	''V<t#++,,X6DKr   c                rk   )z[Call pam_close_session as required by the pam_api
Returns:
  Linux-PAM return value as int
r8   )	r   r]   rR   r^   rO   r_   r<   r=   r>   rl   rm   r   close_sessionZPamAuthenticator.close_session  so    
 {{{!!''Q7	''V<t#++,,X6DKr   c                s    V P                   '       d   \        V R4      '       g   \        # V P                  V P                   VP	                  V4      VP	                  V4      V4      # )zA wrapper for the pam_misc_setenv function
Args:
  name: key name of the environment variable
  value: the value of the environment variable
Returns:
  Linux-PAM return value as int
rT   )r   rJ   r]   rT   r\   )r   ZnamerX   Zreadonlyr3   s   &&&&&r   misc_setenvZPamAuthenticator.misc_setenv  sT     {{{'$0A"B"B!!##DKK$(KK$9$)LL$:$,. 	.r   c                s    V P                   '       g   \        # VP                  V4      pV P                  V P                   V4      pV\        8w  d&   \        V P                  V P                   V4      4      hV# )zA wrapper for the pam_putenv function
Args:
  name_value: environment variable in the format KEY=VALUE
              Without an '=' delete the corresponding variable
Returns:
  Linux-PAM return value as int
)r   r]   r\   rS   r@   	ExceptionrO   )r   rh   r3   rf      &&& r   rd   ZPamAuthenticator.putenv  s`     {{{!!&&x0
j9[ D--dkk6BCCr   c                s   V P                   '       g   \        # \        V\        4      '       d   VP	                  V4      pV P                  V P                   V4      p\        V\        R4      4      '       d   R# \        V\        4      '       d&   \        V P                  V P                   V4      4      h\        P                  R8  d   VP                  V4      pV# )zA wrapper for the pam_getenv function
Args:
  key name of the environment variable
Returns:
  value of the environment variable or None on error
Nr8   )r   r]   r[   r5   r\   rU   ZtypeZintrq   rO   r<   r=   r>   )r   rg   r3   rX   rr   r   getenvZPamAuthenticator.getenv  s     {{{!! c3**X&CS1eT$Z((eS!!D--dkk5ABBt#LL*Er   c                sx   V P                   '       g   \        # V P                  V P                   4      p^ p/ p  W#,          pT'       g    T# Tp\        P
                  R8  d   TP                  T4      p TP                  R^4      w  rxYT&   T^,          pKa    \         d     T# i ; i  \         d     L*i ; i)zVA wrapper for the pam_getenvlist function
Returns:
  environment as python dictionary
Z=r8   )	r   r]   rV   Z
IndexErrorr<   r=   r>   Zsplitr`   )	r   r3   Zenv_listZ	env_countZpam_env_itemsZitemZenv_itemZpam_keyZ	pam_values	   &&       r   
getenvlistZPamAuthenticator.getenvlist  s    
 {{{!!&&t{{3	*    H4'#??843%-^^C%;"
 *3g&NI'  ( +  s#   B 6B+ B('B(+B98B9)r9   r^   r   rD   rB   rL   rP   rR   rI   rU   rV   rT   rQ   rS   rM   rN   rK   rO   r_   )ZloginNTutf-8TF)ru   )r   r   r    r!   r^   r_   r   ri   rj   rn   ro   rp   rd   rs   rt   r$   r%   r,   r-   r   r   r      sE     DFI3VH+T"". &6% %r   )2	PAM_ABORTPAM_ACCT_EXPIREDPAM_AUTHINFO_UNAVAILPAM_AUTHTOK_DISABLE_AGINGPAM_AUTHTOK_ERRPAM_AUTHTOK_EXPIREDPAM_AUTHTOK_LOCK_BUSYPAM_AUTHTOK_RECOVER_ERRPAM_AUTH_ERRPAM_BAD_ITEMPAM_BUF_ERRPAM_CHANGE_EXPIRED_AUTHTOKPAM_CONVPAM_CONV_ERRPAM_CRED_ERRPAM_CRED_EXPIREDPAM_CRED_INSUFFICIENTPAM_CRED_UNAVAILPAM_DATA_SILENTPAM_DELETE_CREDPAM_DISALLOW_NULL_AUTHTOKPAM_ERROR_MSGPAM_ESTABLISH_CRED
PAM_IGNOREPAM_MAXTRIESPAM_MODULE_UNKNOWNPAM_NEW_AUTHTOK_REQDPAM_NO_MODULE_DATAPAM_OPEN_ERRPAM_PERM_DENIEDr?   PAM_PROMPT_ECHO_ONPAM_REFRESH_CREDre   	PAM_RHOST	PAM_RUSERPAM_SERVICEPAM_SERVICE_ERRPAM_SESSION_ERR
PAM_SILENTr@   PAM_SYMBOL_ERRr]   PAM_TEXT_INFOPAM_TRY_AGAINrb   PAM_USERPAM_USER_PROMPTPAM_USER_UNKNOWNr   )Pra   r<   Zctypesr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Zctypes.utilr   Ztypingr   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   re   r   r   r   r   r   r   r@   r   r]   r   r   rb   r   r   r   rc   Z__all__r   r'   r.   rH   rE   rF   r   r+   r   r   <module>r      s   	 
                $ 	            
       		

 &	,	 	,S SW) W egj12gk23	 	'T@i @
k kr   