
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
hj	                 @   s8   d dl Z d dlZd dlmZ ej ZG dd deZdS )    N)Readerc                   sB   e Zd ZdZ fddZdd Zdd Zdd	d
Zdd Z  Z	S )Filesz
    A class used to represent a Log Files Reader

    Args:
        path -- the path where SSSD logs are to
           be read (default /var/log/sssd/)
    c                s*   t  j  g | _| j|| _| j | _d S )N)super__init__	log_filesresolve_pathpathget_domain_logfilesdomains)selfr   )	__class__ "/usr/lib/python3.6/source_files.pyr      s    
zFiles.__init__c             c   sz   xt| j D ]j}y,t|}x|D ]
}|V  qW W dQ R X W q tk
rp } ztjd tj| wW Y dd}~X qX qW dS )zH
        Yields:
            str: The next line in the log file
        Nz(Could not find domain log file, skipping)r   openFileNotFoundErrorloggerZwarning)r   filesfilelineerrr   r   r   __iter__   s    



zFiles.__iter__c             C   s   |j dr|S |d S d S )N/)endswith)r   r   r   r   r   r   '   s    
zFiles.resolve_pathFc          	      sr   g }ddddddddd	g	}|r0t j | jd
 }nt j | jd }x,|D ]$ t fdd|D sF|j  qFW |S )z> Retrieve list of SSSD log files, exclude rotated (.gz) files ZifpZnssZpamZsudoZautofsZsshZpacZkcmz.gzz*.logzsssd_*c             3   s   | ]}| kV  qd S )Nr   ).0s)r   r   r   	<genexpr>7   s    z,Files.get_domain_logfiles.<locals>.<genexpr>)globr   anyappend)r   childZdomain_filesZexclude_listZ	file_listr   )r   r   r	   -   s    

zFiles.get_domain_logfilesc             C   s   g | _ || jjkr&| j j| jd  nX|| jjkrF| j j| jd  n8|| jjkr~| j|}|sdtx|D ]}| j j| qjW dS )zb
        Switch the reader to interact with a certain SSSD component
        NSS, PAM, BE
        zsssd_nss.logzsssd_pam.logN)	r   Z	ComponentZNSSr   r   ZPAMZBEr	   IOError)r   Z	componentr   r
   Zdomr   r   r   set_component<   s    

zFiles.set_component)F)
__name__
__module____qualname____doc__r   r   r   r	   r!   __classcell__r   r   )r   r   r   	   s   
r   )r   ZloggingZsssd.source_readerr   Z	getLoggerr   r   r   r   r   r   <module>   s   