Edit File: needs_restarting.cpython-36.pyc
3 �*�d%������������������@���s��d�dl�mZ�d�dl�mZ�d�dl�mZ�d�dl�mZ�d�dlmZmZ�d�dlZd�dl Zd�dl Z d�dlZd�dlZd�dl Z d�dlZddd d ddd dgZdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd ��ZG�d!d"��d"e�ZG�d#d$��d$e�ZejjG�d%d&��d&ejj��Z dS�)'�����)�absolute_import)�division)�print_function)�unicode_literals)�logger�_NZkernelz kernel-rtZglibczlinux-firmwareZsystemd�dbuszdbus-brokerzdbus-daemonc����������������s����t�jj|��st��S�t��}xjt�j|��D�]\}t�jj|�s$|jd��rBq$tt�jj|�|���&}x|D�]}|j |j ��|f��q\W�W�dQ�R�X�q$W�t����x4|jj��j ��jdd��|D��d�D�]}��j |j��q�W�x6��fdd�|D��D�] \}}tjtdj||d����q�W���S�) z� Provide filepath as string if single dir or list of strings Return set of package names contained in files under filepath z.confNc�������������S���s���h�|�]}|d���qS�)r�����)�.0�xr ���r ����&/usr/lib/python3.6/needs_restarting.py� <setcomp>>���s����z'get_options_from_dir.<locals>.<setcomp>)�namec����������������s���h�|�]}|d����kr|�qS�)r���r ���)r ���r���)�packagesr ���r���r ���@���s����z`No installed package found for package name "{pkg}" specified in needs-restarting file "{file}".)�pkg�file)�os�path�exists�set�listdir�isdir�endswith�open�join�add�rstrip�sack�query� installed�filterr���r����warningr����format)�filepath�baseZoptionsr����fp�liner���r���r ���)r���r����get_options_from_dir,���s"���� $&r'���c�������������c���s����x�t���D�]�\}}y<|�d�k r(|�t|�kr(wt|ddd��}|j��}W�d�Q�R�X�W�n"�tk rn���tjd|��wY�nX�x$|D�]}t||�}|d�k rv|V��qvW�qW�d�S�)N�r�replace)�errorszFailed to read PID %d's smaps.)� list_smaps� owner_uidr���� readlines�EnvironmentErrorr���r!����smap2opened_file)�uid�pid�smapsZ smaps_file�linesr&����ofiler ���r ���r����list_opened_filesG���s���� r5���c��������������c���sN���xHt�jd�D�]:}�yt|��}W�n�tk r2���wY�nX�d|�}||fV��qW�d�S�)Nz/procz/proc/%d/smaps)r���r����int� ValueError)Zdir_r1���r2���r ���r ���r���r+���X���s����r+���c����������������s���t����i�������fdd�}|S�)Nc����������������s,�����j�|���}|�k r|S��|��}|��|�<�|S�)N)�get)Zparam�val)�cache�func�sentinelr ���r����wrappere���s����zmemoize.<locals>.wrapper)�object)r;���r=���r ���)r:���r;���r<���r����memoizeb���s����r?���c�������������C���s���t�j|��tj�S�)N)r����stat�ST_UID)�fnamer ���r ���r���r,���o���s����r,���c�������������C���s$���|�j���j|d�j��}|r |d�S�d�S�)N)r���r���)r���r ����run)r���rB���Zmatchesr ���r ���r����owning_packages���s����rD���c�������������C���sP���d|��}t�|��}tjj|j���}W�d�Q�R�X�dj|jd��}td|�|f���d�S�)Nz/proc/%d/cmdline� ��z%d : %s)r����dnfZi18nZucd�readr����split�print)r1���ZcmdlineZcmdline_fileZcommandr ���r ���r���� print_cmdz���s ���� rK���c�������������C���s^���t�j��}|jdd�}t�j|d�}|jd|j|���}t�j|dd�}|jdd�}|jd�rZ|S�d�S�) Nzorg.freedesktop.systemd1z/org/freedesktop/systemd1z org.freedesktop.systemd1.Managerzorg.freedesktop.DBus.Properties)Zdbus_interfacezorg.freedesktop.systemd1.UnitZIdz.service)r���Z SystemBusZ get_objectZ InterfaceZGetUnitByPIDZGetr���)r1���ZbusZsystemd_manager_objectZsystemd_manager_interfaceZ service_proxyZservice_propertiesr���r ���r ���r����get_service_dbus����s$���� rL���c�������������C���sn���|j�d�}|dk�rd�S�|j�d�dkr(d�S�||d���j��}|jd�}|dk�rVt|�|d�S�t|�|d�|��d�S�d�S�)N�/r���z00:z (deleted)FT)�find�strip�rfind� OpenedFile)r1���r&���Zslash�fnZsuffix_indexr ���r ���r���r/�������s���� r/���c���������������@���s*���e�Zd�Zejd�Zdd��Zedd���ZdS�)rQ���z^(.+);[0-9A-Fa-f]{8,}$c�������������C���s���||�_�||�_||�_d�S�)N)�deletedr���r1���)�selfr1���r���rS���r ���r ���r����__init__����s����zOpenedFile.__init__c�������������C���s(���|�j�r"|�jj|�j�}|r"|jd�S�|�jS�)a;��Calculate the name of the file pre-transaction. In case of a file that got deleted during the transactionm, possibly just because of an upgrade to a newer version of the same file, RPM renames the old file to the same name with a hexadecimal suffix just before delting it. ����)rS����RE_TRANSACTION_FILE�matchr����group)rT���rX���r ���r ���r���� presumed_name����s ���� zOpenedFile.presumed_nameN) �__name__� __module__�__qualname__�re�compilerW���rU����propertyrZ���r ���r ���r ���r���rQ�������s��� rQ���c���������������@���s4���e�Zd�Zdd��Zedd���Zedd���Zdd��Zd S�) �ProcessStartc�������������C���s���|�j���|�_|�j��|�_d�S�)N)� get_boot_time� boot_time�get_sc_clk_tck� sc_clk_tck)rT���r ���r ���r���rU�������s���� zProcessStart.__init__c���������������C���s���t�tjd�j�S�)Nz/proc/1)r6���r���r@����st_mtimer ���r ���r ���r���rb�������s����zProcessStart.get_boot_timec���������������C���s���t�jt�jd��S�)N� SC_CLK_TCK)r����sysconf� sysconf_namesr ���r ���r ���r���rd�������s����zProcessStart.get_sc_clk_tckc���������� ���C���sL���d|�}t�|��}|j��j��j��}W�d�Q�R�X�t|d��}||�j�}|�j|�S�)Nz /proc/%d/stat����)r���rH���rO���rI���r6���re���rc���)rT���r1���Zstat_fnZ stat_fileZstatsZticks_after_bootZsecs_after_bootr ���r ���r����__call__����s���� zProcessStart.__call__N)r[���r\���r]���rU����staticmethodrb���rd���rk���r ���r ���r ���r���ra�������s���ra���c���������������@���s4���e�Zd�Zd Zed�Zedd���Zdd��Zdd��Z d S�)�NeedsRestartingCommand�needs-restartingz/determine updated binaries that need restartingc�������������C���sF���|�j�dddtd�d��|�j�dddtd�d��|�j�d d dtd�d��d�S�)Nz-uz --useronly� store_truez#only consider this user's processes)�action�helpz-rz--reboothintzKonly report whether a reboot is required (exit code 1) or not (exit code 0)z-sz --servicesz%only report affected systemd services)�add_argumentr���)�parserr ���r ���r���� set_argparser����s���� z$NeedsRestartingCommand.set_argparserc�������������C���s���|�j�j}d|_d�S�)NT)�cli�demandsZsack_activation)rT���rv���r ���r ���r���� configure����s����z NeedsRestartingCommand.configurec������� ������C���s���t���}tjt|�jj�}t|�}ttj j |�jjjd�|�j�}t j|��|�jj�rt��}|�jjj��j��}x,|jt d�D�]}|j|jkrr|j|j��qrW�|r�ttd���xt|�D�]}td|���q�W�t���ttd���ttd�d��tjj���nttd���ttd ���d�S�t��}|�jj�r tj ��nd�} xHt!| �D�]<} || j"�}|d�k�rJ�q.|j|| j#�k�r.|j| j#���q.W�|�jj$�r�td d��t|�D���}x |D�]}|d�k �r�t|���q�W�dS�xt|�D�]}t%|���q�W�d�S�) Nz#etc/dnf/plugins/needs-restarting.d/)r���z;Core libraries or services have been updated since boot-up:z * %sz2Reboot is required to fully utilize these updates.zMore information:z)https://access.redhat.com/solutions/27943z>No core libraries or services have been updated since boot-up.zReboot should not be necessary.c�������������S���s���g�|�]}t�|��qS�r ���)rL���)r ���r1���r ���r ���r���� <listcomp>��s����z.NeedsRestartingCommand.run.<locals>.<listcomp>r���)&ra���� functools�partialrD���r$���r���r?���r'���r���r���r���ZconfZinstallroot�NEED_REBOOT�extendZoptsZ reboothintr���r���r���r ���Zinstalltimerc���r���r���rJ���r����sortedrG���� exceptions�ErrorZuseronly�geteuidr5���rZ���r1���ZservicesrK���) rT���Z process_startZ owning_pkg_fn�optZneed_rebootr���r���r���Z stale_pidsr0���r4����namesr1���r ���r ���r���rC�������sT���� zNeedsRestartingCommand.runN)rn���) r[���r\���r]����aliasesr���Zsummaryrl���rt���rw���rC���r ���r ���r ���r���rm�������s ��� rm���)!Z __future__r���r���r���r���Zdnfpluginscorer���r���rG���Zdnf.clir���ry���r���r^���r@���r{���r'���r5���r+���r?���r,���rD���rK���rL���r/���r>���rQ���ra���ZpluginZregister_commandru���ZCommandrm���r ���r ���r ���r����<module>���s4���