HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/sssd/modules/__pycache__/request.cpython-39.opt-1.pyc
a

�,h�*�@sBddlZddlZddlmZddlmZe��ZGdd�d�ZdS)�N)�SubparsersAction)�Optionc@s�eZdZdZdZgZedded�edde�gZedd	e	�ed
de�edd
e�edde�gZ
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�ZdS)#�RequestAnalyzerz�
    A request analyzer module, handles request tracking logic
    and analysis. Parses input generated from a source Reader.
    Nz	--verbosezVerbose outputz-vz--pamzFilter only PAM requests�cidzTrack request with this IDz--childzInclude child process logsz--mergez'Merge logs together sorted by timestampzTrack only PAM requestscCs|j��dS)z|
        Print the module parser help output

        Args:
            args (Namespace): argparse parsed arguments
        N)�
module_parser�
print_help)�self�args�r
�8/usr/lib/python3.9/site-packages/sssd/modules/request.py�print_module_helpsz!RequestAnalyzer.print_module_helpcCsvd}|jd|dd�|_|jjddtdd�}|�d	�}|�|d
d|j|j�|�|dd
|j|j	�|jj
|jd�|jS)z�
        Setup module parser, subcommands, and options

        Args:
            parser_grp (argparse.Action): Parser group to nest
               module and subcommands under
        zAnalyze request tracking moduleZrequestzRequest tracking)�description�helpN�	subparserZCOMMANDS)�title�dest�action�metavarzOperation Modes�listzList recent requestsZshowzTrack individual request ID)�func)�
add_parserr�add_subparsersrZadd_parser_groupZadd_subcommand�
list_requests�	list_opts�
track_request�	show_opts�set_defaultsr)rZ
parser_grpZcliZdescrZ
subcmd_grpr
r
r�
setup_args&s&��

�
�zRequestAnalyzer.setup_argscCs8|jdkrddlm}|�}nddlm}||j�}|S)z�
        Load the appropriate source reader.

        Args:
            args (Namespace): argparse parsed arguments

        Returns:
            Instantiated source object
        Zjournaldr)�Journald)�Files)�sourceZsssd.source_journaldrZsssd.source_filesrZlogdir)rr	rr rr
r
r�loadBs


zRequestAnalyzer.loadccs>|D]4}|D]*}t�|�}|�|�r|�d�r0q|VqqdS)z�
        Yield lines which match any number of patterns (OR) in
        provided patterns list.

        Args:
            source (Reader): source Reader object
        Yields:
            lines matching the provided pattern(s)
        �   *  N)�re�compile�search�
startswith)rr �patterns�line�patternZre_objr
r
r�matched_lineTs



zRequestAnalyzer.matched_linecCsFg}|�||�D]0}t�|�}|�|�}|r|�d�}|�|�q|S)a�
        Retrieve list of associated REQ_TRACE ids. Filter
        only source lines by pattern, then parse out the
        linked id with the provided regex.

        Args:
            source (Reader): source Reader object
            pattern (list of str): regex pattern(s) used for finding
                 linked ids
            regex (str): regular expression used to extract linked id

        Returns:
            List of linked ids discovered
        r)r*r#r$r%�group�append)rr r)ZregexZ
linked_ids�matchZid_re�foundr
r
r�get_linked_idsfs


zRequestAnalyzer.get_linked_idscCsHd}|r |j�|�|d��n$t|�jdkr<t|dd�nt|�|S)a�
        Print or consume a line, if merge cli option is provided then consume
        boolean is set to True

        Args:
            line (str): line to process
            source (Reader): source Reader object
            consume (bool): If True, line is added to consume_logs
               list, otherwise print line

        Returns:
            True if line was processed, otherwise False
        T���r�)�end)�
consumed_logsr,�rstrip�type�__name__�print)rr(r ZconsumeZ
found_resultsr
r
r�consume_line~szRequestAnalyzer.consume_linecCsi}|D]t}d|vrq|�d�}|ddd�}t�d|d�}|�d�}||f|��vrp|||f|7<q||||f<q|��D�]�\}}	g}
g}|	��D�]h}d}
d}d}|�d�}|dd	d�}|�d
�ddd�}t�d|�r�|�|�t�d
|��rN|�d�d}
|��|�d�}|dd	d�}|�d
�ddd�}n8t�d|��rl|�	d�d}nt�d|��r�|�	�d}|
�r�t
d|
�|�r�||
v�r�t
d|dd��|
�|�|r�d|v�s�d|vr�||vr�tt�d|��r�t
d|�|�|�q�q�dS)z�
        Parse log file and print formatted verbose list_requests output

        Args:
            source (Reader): source Reader object
        zCID#�[rN�z
CID#[0-9]*�r1��:��\[cmdZcache_req_send�'�Zcache_req_process_inputr0Zcache_req_search_sendz   - z	       - ZUIDZGIDz\d)
�splitr#r%r+�keys�items�
splitlines�print_formatted�clear�rsplitr7r,�bool)rr �datar(�fields�ts�resultr�k�vZcr_doneZid_doneZcidlineZplugin�name�idZcr_fieldZcrr
r
r�print_formatted_verbose�sV






z'RequestAnalyzer.print_formatted_verbosecCs�|�d�rdSd|vrdS|�d�d}|dd�}|�d�}|dd	d
�}|d	d	d�}|dd	d�}|��s�|d
d	d�}t|�d|�d|�d|���|S)z�
        Parse line and print formatted list_requests output

        Args:
            line (str): line to parse
        Returns:
            Client ID from printed line, 0 otherwise
        r"rZ	refreshed�)rANr9r;r>i����r0��z: [uid z] CID #z: )r&rB�	isnumericr7)rr(rLrKr�cmd�uidr
r
rrF�s


zRequestAnalyzer.print_formattedcCs�|�|�}|jj}d}dg}|jr.|jj}d}t�d|�d��|�|d�|jr^|�	|�n4|�
||�D]&}t|�jdkr�t
|�qj|�|�qjdS)	z�
        List component (default: NSS) responder requests

        Args:
            args (Namespace):  populated argparse namespace
        �nssr?�pamz******** Listing z client requests ********FrN)r!�	Component�NSSrZ�PAM�logger�info�
set_component�verboserRr*r5r6r7rF)rr	r �	component�respr'r(r
r
rr�s

zRequestAnalyzer.list_requestsc
sb|�|�}|j}d}d}|jj}d}d|�d�g�|jrD|jj}d}t�d|�d|�d��|�||j	�|�
|��D]}|�|||j�}qvt�d	|�d
��d|�d|�d�g�|�|jj
|j	�d
}	|�|�|	�}
����fdd�|
D�|�
|��D]}|�|||j�}q�|j�r@t|jdd�d�}|D]}t|��q0|�s^|�s^t�d|�d��dS)z�
        Print Logs pertaining to individual SSSD client request

        Args:
            args (Namespace):  populated argparse namespace
        FrYz\[CID#z\]rZz******** Checking z responder for Client ID z *******z)********* Checking Backend for Client ID z	 ********zREQ_TRACE.*\[sssd.z CID #z\[RID#[0-9]+\]csg|]}��d|����qS)�\)r,)�.0rQ�r)r
r�
<listcomp>4�z1RequestAnalyzer.track_request.<locals>.<listcomp>cSs|�d�dS)NrSr)rB)�sr
r
r�<lambda><rhz/RequestAnalyzer.track_request.<locals>.<lambda>)�keyzID z not found in logs!N)r!rr[r\rZr]r^r_r`�childr*r8�mergeZBEr/rG�sortedr3r7�warn)
rr	r rZresp_resultsZ
be_resultsrbrcr-Zbe_id_regexZbe_idsZsorted_list�entryr
rfrrsB
�
�zRequestAnalyzer.track_request)r6�
__module__�__qualname__�__doc__rr3rrIr�intrrrr!r*r/r8rRrFrrr
r
r
rr
s*
�



�	Fr)r#ZloggingZsssd.parserrrZ	getLoggerr^rr
r
r
r�<module>s