
    c                     2    d Z dZddlZddlZddlZd ZddZy)z!A daemonize function (for Unices)zrestructuredtext en    Nc                    	 ddl m}  |t        |             }t        t        d      r+t        j                  |j                  |j                         nddl
}|j                  d      j                  |j                  |j                        dk  rP|j                  j                  |j                  d      j                  }t!        |t        j"                  |      d      t        j$                  |j                         t        j&                  |j(                         |j*                  t        j,                  d<   y# t        $ r ddl m}  ||       }Y =w xY w)zRChange process user and group ID

    Argument is a numeric user id or a user namer   )getpwuid)getpwnam
initgroupsNerrnoHOME)pwdr   int
ValueErrorr   hasattrosr   pw_namepw_gidctypesCDLLc_intin_dll	pythonapivalueOSErrorstrerrorsetgidsetuidpw_uidpw_direnviron)userr   passwdr   r   errs         7/usr/lib/python3/dist-packages/logilab/common/daemon.pysetugidr!      s      #d)$ r< 
fnnfmm4;;t''FJ,,%%f&6&6@FFC#r{{3/>>IIfmmIIfmmBJJv    $ s   D< <EEc                    t        j                         ryt        j                          t        j                         ryt        j                  d       t        j                  dt         j
                        }t        d      D ]  }	 t        j                  ||        t        j                  |       t        j                  d       | rt         j                  j                  |       }t         j                  j!                  |      st        j"                  |       t	        | d      }|j%                  t'        t        j(                                      |j                          |t        j*                  |       |rt-        |       y# t        $ r)}|j                  t        j                  k7  r Y d}~5d}~ww xY w)	zdaemonize a Unix process. Set paranoid umask by default.

    Return 1 in the original process, 2 in the first fork, and None for the
    second fork (eg daemon process).
          /z	/dev/null   Nignorew)r   forksetsidchdiropenO_RDWRrangedup2r   r   EBADFclosewarningsfilterwarningspathdirnameexistsmakedirswritestrgetpidumaskr!   )pidfileuidr;   nulliepiddirfs           r    	daemonizerC   5   s.    
wwyIIK 
wwyHHSM77;		*D1X 	GGD! HHTNH% )ww~~f%KK#	BIIK !		

-  	ww%++% &	s   F	F=F88F=)NN?   )__doc____docformat__r   r   r2   r!   rC        r    <module>rI      s"   $ (% 	  '4/rH   