<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
X(                 @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ d dlZejdd Zejdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd  Z&d!d" Z'd#d$ Z(d%d& Z)d'd( Z*d)d* Z+d+d, Z,e j-d2krBe.Z/ne0Z/d.d/ Z1d0d1 Z2dS )3    N)bootedis_fifo_is_fifo	is_socket
_is_socketis_socket_inet_is_socket_inetis_socket_unix_is_socket_unixis_socket_sockaddr_is_socket_sockaddris_mq_is_mq
listen_fdsnotifyc              c   sH   y
d V  W n8 t k
rB }  z| jtjkr0tj   W Y d d } ~ X nX d S )N)OSErrorerrnoZENOSYSpytestskip)e r   #/usr/lib64/python3.6/test_daemon.pyskip_enosys   s    
r   c             c   s4   t j| }z
|V  W d |d j  |d j  X d S )Nr      )socketZ
socketpairclose)Zfamilypairr   r   r   closing_socketpair   s
    

r   c               C   s   t jjdrn d S )Nz/run/systemd/system)ospathexistsr   r   r   r   test_booted&   s    r!   c             C   s.   | j dj}tj| tj|tjtjB }d S )Nz	test.fifo)joinstrpathposixmkfifor   openO_RDONLY
O_NONBLOCK)tmpdirr   fdr   r   r   test__is_fifo.   s    
r+   c             C   s2   | j d}|jd |j}tj|tjtjB }d S )Nz	test.fifoboo)r"   writer#   r   r&   r'   r(   )r)   filer   r*   r   r   r   test__is_fifo_file6   s
    

r/   c             C   s<   | j dj}tjt W d Q R X tjt W d Q R X d S )Nz	test.fifo)r"   r#   r   raisesr   )r)   r   r   r   r   test__is_fifo_bad_fd?   s
    
r1   c             C   s:   | j dj}tj| tj|tjtjB }tj|d}d S )Nz	test.fifor)	r"   r#   r$   r%   r   r&   r'   r(   fdopen)r)   r   r*   r.   r   r   r   test_is_fifoH   s
    
r4   c             C   s>   | j d}|jd |j}tj|tjtjB }tj|d}d S )Nz	test.fifor,   r2   )r"   r-   r#   r   r&   r'   r(   r3   )r)   r.   r   r*   r   r   r   test_is_fifo_fileS   s    

r5   c             C   s<   | j dj}tjt W d Q R X tjt W d Q R X d S )Nz	test.fifo)r"   r#   r   r0   r   )r)   r   r   r   r   test_is_fifo_bad_fd_   s
    
r6   c             C   s.   yt | S  tk
r( } zdS d }~X nX d S )NF)r   r   )argerrorr   r   r   is_mq_wrapperh   s    r9   c             C   s.   yt | S  tk
r( } zdS d }~X nX d S )NF)r   r   )r7   r8   r   r   r   _is_mq_wrapperp   s    r:   c              C   sf   t tjR} xJ| D ]B}t  W d Q R X |j }t  W d Q R X t  W d Q R X qW W d Q R X d S )N)r   r   AF_UNIXr   fileno)r   sockr*   r   r   r   test_no_mismatchx   s    


r>   c              C   sb   t tjN} xF| D ]>}x&||j fD ]}t  W d Q R X q$W t  W d Q R X qW W d Q R X d S )N)r   r   r;   r<   r   )r   r=   r7   r   r   r   test_is_socket   s    
r?   c           C   C   s`  t jtjtjB} | jd | j \}}dj|}xd	D ]}x| | j fD ]}t  W d Q R X t  W d Q R X t  W d Q R X t  W d Q R X t  W d Q R X t	j
t t|ddd W d Q R X t  W d Q R X t  W d Q R X qRW t	j
t t|ddd W d Q R X t  W d Q R X t  W d Q R X | jd q>W W d Q R X d S )
N	127.0.0.1r   z:{}r   i@ )Zflowinfo   )r@   r   )r   r   )
contextlibclosingr   ZAF_INETbindZgetsocknameformatr<   r   r   r0   
ValueErrorr   r   Zlisten)r=   ZaddrZportZ	listeningr7   r   r   r   test_is_socket_sockaddr   s:    









rG   c           	   C   s0   t tj} x| D ]}|j }qW W d Q R X d S )N)r   r   r;   r<   )r   r=   r*   r   r   r   test__is_socket   s    
rH   c           
   C   s>   t tj*} x"| D ]}x||j fD ]}q$W qW W d Q R X d S )N)r   r   r;   r<   )r   r=   r7   r   r   r   test_is_socket_unix   s    
rI   c           	   C   s0   t tj} x| D ]}|j }qW W d Q R X d S )N)r   r   r;   r<   )r   r=   r*   r   r   r   test__is_socket_unix   s    
rJ   c               C   s   t jd t jd d S )N
LISTEN_FDS
LISTEN_PID)r   unsetenvr   r   r   r   test_listen_fds_no_fds   s    

rN   c               C   s    dt jd< tt j t jd< d S )N3rK   rL   )r   environstrgetpidr   r   r   r   test_listen_fds   s    
rS   c               C   s    dt jd< tt j t jd< d S )N1rK   rL   )r   rP   rQ   rR   r   r   r   r   test_listen_fds_default_unset   s    
rU   c            	   C   s   t   W d Q R X d S )N)r   r   r   r   r   test_notify_no_socket  s    
rV      c            /   C   s   dt jd< tjt td W d Q R X tjt$ t  tdg d W d Q R X W d Q R X tjt tdddgd W d Q R X tjt tdt j d W d Q R X tjt tdt j d
d	 W d Q R X d S )Nz	/dev/nullNOTIFY_SOCKETzREADY=1z	FDSTORE=1)fdsr      )pid)r[   rY   )r   )r   rP   r   r0   connection_errorr   r   rR   r   r   r   r   test_notify_bad_socket  s    
 r]   c             C   s   | j dj}tjtjtj}y|j| W n2 tjk
r\ } ztjd|  W Y d d }~X nX t	tdd}|j
tj|d |tjd< t  W d Q R X d S )Nr   zfailed to bind socket (%s)SO_PASSCRED   r   rX   )r"   r#   r   r;   Z
SOCK_DGRAMrD   r8   r   ZxfailgetattrZ
setsockoptZ
SOL_SOCKETr   rP   r   )r)   r   r=   r   r^   r   r   r   test_notify_with_socket  s     

ra   )rW   )3sysr   r$   r   rB   r   Zsystemd.daemonr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   contextmanagerr   r   r!   r+   r/   r1   r4   r5   r6   r9   r:   r>   r?   rG   rH   rI   rJ   rN   rS   rU   rV   version_infoConnectionRefusedErrorr\   r   r]   ra   r   r   r   r   <module>   sB   D
	
			&			