
    b"P                         d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmc mZ d dlmZ d	 Zd
 Zd Zd ZddZ G d de          ZdS )    N)
gp_pol_ext)NamedTemporaryFile)ConfigParser)PopenPIPE)	get_bytes
get_string)glob)logc                 .   | d S t          j        d          }|t          j        d           d S t	          |dgt
          t
                    }|                                \  }}|j        dk    r$t          j        dt          |                     d S d S )Ndconfz)Failed to update dconf. Command not foundupdate)stdoutstderrr   zFailed to update dconf)	shutilwhichr   errorr   r   communicate
returncoder	   )test_dirr   pouterrs        @/usr/lib/python3/dist-packages/samba/gp/gp_gnome_settings_ext.pydconf_updater      s    L!!E}	=>>>uhT:::A}}HC|q	*JsOO<<<<<     c                     d}| (t           j                            | |dd                    }t          j        |d           |S )Nz/etc/dconf/db/local.d/locks   Texist_okospathjoinmakedirs)r   	locks_dirs     r   create_locks_dirr'   (   sE    -IGLL9QRR=99	K	D))))r   c                    d}| (t           j                            | |dd                    }t           j                            |          rd S t          j        t           j                            |          d           t          dt           j                            |          d          5 }|                    d           |j        }d d d            n# 1 swxY w Y   t          j
        ||           d S )	Nz/etc/dconf/profile/userr   Tr   wF)dirdeletezuser-db:user
system-db:local)r"   r#   r$   existsr%   dirnamer   writenamer   move)r   user_profiler)   fnames       r   create_user_profiler3   /   s   ,Lw||Hl122.>??	w~~l## K--====	CRW__\%B%B#(
* 
* 
* -.	/000               K|$$$$$s   0CC Cc                     d}| (t           j                            | |dd                    }t          j        |d           |S )Nz/etc/dconf/db/local.dr   Tr   r!   )r   local_dbs     r   create_local_dbr6   <   sD    &H7<<(122,77K4((((Or    c                     fdt          j        |           D             }t          d |D             dgz             dz   S )Nc                 @    g | ]}t          j        d z  |          S )z(\d+)%s)rematch).0fr2   s     r   
<listcomp>z$select_next_conf.<locals>.<listcomp>D   s*    NNN1rx
U*A..NNNr   c                 V    g | ]&}|t          |                    d                     'S )r   )intgroup)r<   ms     r   r>   z$select_next_conf.<locals>.<listcomp>E   s-    666AA6AGGAJJ666r   r   r   )r"   listdirmax)	directoryr2   configss    ` r   select_next_confrG   C   sO    NNNN
98M8MNNNG66666s:;;A==r   c                   z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z	 ddZd Zd Zd Z	 ddZd Z xZS )gp_gnome_settings_extc                 b     t                      j        |  g d| _        i | _        d | _        d S )N)zCompose KeyzDim Screen when User is IdlezLock Down Specific SettingszWhitelisted Online AccountszEnabled Extensions)super__init__keyslock_down_settingsr   )selfargs	__class__s     r   rL   zgp_gnome_settings_ext.__init__H   s?    $+ + +	
 #%r   c                     dS )Nz!GNOME Settings/Lock Down Settings )rO   s    r   __str__zgp_gnome_settings_ext.__str__R   s    22r   c                 `    || j         vr
i | j         |<   |j        | j         |         |j        <   d S N)rN   data	valuename)rO   kes      r   __add_lockdown_dataz)gp_gnome_settings_ext.__add_lockdown_dataU   s9    D+++)+D#A&23&"1;///r   c                 |    |j         | j        vri | j        |j         <   |j        dk    | j        |j                  d<   d S )Nr   Enabled)rX   rN   rW   )rO   rZ   s     r   __enable_lockdown_dataz,gp_gnome_settings_ext.__enable_lockdown_dataZ   sA    ;d55535D#AK0:;&A+,Y777r   c                    | j         d         }| j                            t          |           |          }t	          | j                   t          | j                  }||                    d          \  }}n3t          |d          }t          j
                            |d|z            }i ddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(i}|d)         |                                 vrt          j        d*|           d S t                      }	d+}
|	                    |
           |	                    |
d,d-||d)                  z             t#          |d.          5 }|	                    |           d d d            n# 1 swxY w Y   t'          | j                  }|2t          |          }t          j
                            |d|z            }t#          |d.          5 }|                    d/           d d d            n# 1 swxY w Y   t)          | j                   | j                            t          |           |d                    ||g                     d S )0Nr   ;z-input-sourcesz%010d-input-sourcesz	Right Altzcompose:raltzLeft Winzcompose:lwinz3rd level of Left Winzcompose:lwin-altgrz	Right Winzcompose:rwinz3rd level of Right Winzcompose:rwin-altgrMenuzcompose:menuz3rd level of Menuzcompose:menu-altgrz	Left Ctrlzcompose:lctrlz3rd level of Left Ctrlzcompose:lctrl-altgrz
Right Ctrlzcompose:rctrlz3rd level of Right Ctrlzcompose:rctrl-altgrz	Caps Lockzcompose:capsz3rd level of Caps Lockzcompose:caps-altgrzThe "< >" keyzcompose:102z3rd level of the "< >" keyzcompose:102-altgrPausezcompose:pausPrtSczcompose:prsczScroll Lockzcompose:sclkzKey NamezCompose Key not recognizedzorg/gnome/desktop/input-sourceszxkb-options['%s']r)   z,/org/gnome/desktop/input-sources/xkb-options)rM   gp_dbretrievestrr3   r   r6   splitrG   r"   r#   r$   r   r   r   add_sectionsetopenr.   r'   r   store)rO   rW   	attributeold_vallocal_db_dirr5   lockconf_iddata_mapparsersectionr)   r&   s                r   __apply_compose_keyz)gp_gnome_settings_ext.__apply_compose_key_   sv   IaL	*%%c$ii;;DM***&t}55$]]3//NHdd&|5EFFGw||L$9G$CE EH[. ,.B !. ./C	
 ^ )*> !/ ./D "? /0E !. ./C %m 23F n  n!" #N# & 
8==??22I2D999F37###

7MhtJ'788	: 	: 	:(C   	ALLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 %T]33	?&y11G7<<	+@7+JKKD$__ 	DGGBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	T]###
TIsxx48H/I/IJJJJJs$   3FFF8HH!Hc           	         | j         d         }| j                            t          |           |          }t	          | j                   t          | j                  }||                    d          \  }}}n3t          |d          }t          j
                            |d|z            }t                      }	d}
|	                    |
           |	                    |
dd           |	                    |
dt          |d	                              t          |d
          5 }|	                    |           d d d            n# 1 swxY w Y   |3t          |d          }t          j
                            |d|z            }t                      }	d}
|	                    |
           |	                    |
dd|d         z             t          |d
          5 }|	                    |           d d d            n# 1 swxY w Y   t#          | j                  }|2t          |          }t          j
                            |d|z            }t          |d
          5 }|                    d           |                    d           |                    d           d d d            n# 1 swxY w Y   t%          | j                   | j                            t          |           |d                    |||g                     d S )Nr   r`   z-powerz%010d-powerz'org/gnome/settings-daemon/plugins/powerzidle-dimtruezidle-brightnesszDim Idle Brightnessr)   z-sessionz%010d-sessionzorg/gnome/desktop/sessionz
idle-delayz	uint32 %dDelayz%010d-power-savingz2/org/gnome/settings-daemon/plugins/power/idle-dim
z9/org/gnome/settings-daemon/plugins/power/idle-brightness
z%/org/gnome/desktop/session/idle-delay)rM   re   rf   rg   r3   r   r6   rh   rG   r"   r#   r$   r   ri   rj   rk   r.   r'   r   rl   )rO   rW   rm   rn   ro   local_power_dblocal_session_dbrp   rq   rs   rt   r)   r&   s                r   __apply_dim_idlez&gp_gnome_settings_ext.__apply_dim_idle   s~   IaL	*%%c$ii;;DM***&t}555<]]35G5G2N,dd&|X>>GW\\,8OPPN;7###

7J///

7-s48M3N/O/OPPP.#&& 	!LLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	?&|Z@@G!w||L/G:STT-7###

7L+W*EFFF"C(( 	ALLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 %T]33	?&y11G7<<	+?'+IJJD$__ 	=GGIJJJGGPQQQGG;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=
 	T]###
TIsxx9I9=9? 0@ 0@ 	A 	A 	A 	A 	As7   #EE	E	G<<H H A J++J/2J/c                 Z   | j         d         }| j                            t          |           |          }t	          | j                   t          | j                  }||}n3t          |d          }t          j	        
                    |d|z            }t          |d          5 }|                                 D ]}|                    d|z             	 d d d            n# 1 swxY w Y   t          | j                   | j                            t          |           ||           d S )N   z-group-policyz%010d-group-policyr)   z%s
)rM   re   rf   rg   r3   r   r'   rG   r"   r#   r$   rk   r.   r   rl   )	rO   rW   rm   rn   r&   policy_filerq   r)   keys	            r   __apply_specific_settingsz/gp_gnome_settings_ext.__apply_specific_settings   sO   IaL	*%%c$ii;;DM***$T]33	!KK&y/BBG',,y2F2PQQK+s## 	&qyy{{ & &%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	T]###
TI{;;;;;s   &0C##C'*C'c           	         | j         d         }| j                            t          |           |          }t	          | j                   t          | j                  }t          | j                  }dd                    |                                           z  }| 	                    ||dd||d          }t          | j                   | j                            t          |           |d                    |                     d S )N   rd   ', 'goazwhitelisted-providerszorg/gnome/online-accountsr`   )rM   re   rf   rg   r3   r   r6   r'   r$    _gp_gnome_settings_ext__lockdownr   rl   )rO   rW   rm   rn   ro   r&   valpolicy_filess           r   __apply_whitelisted_accountz1gp_gnome_settings_ext.__apply_whitelisted_account   s    IaL	*%%c$ii;;DM***&t}55$T]33	TYY[[111|Y'>W'BD D 	T]###
TIsxx/E/EFFFFFr   c                    | j         d         }| j                            t          |           |          }t	          | j                   t          | j                  }||}n2t          |          }t          j	        
                    |d|z            }t                      }d}|                    |           |                                 }	|                    |ddd
                    |	          z             |                    |dd           t          |d	          5 }
|                    |
           d d d            n# 1 swxY w Y   t!          | j                   | j                            t          |           ||           d S )
N   %010d-extensionszorg/gnome/shellzenabled-extensionsrd   r   zdevelopment-toolsfalser)   )rM   re   rf   rg   r3   r   r6   rG   r"   r#   r$   r   ri   rj   rk   r.   r   rl   )rO   rW   rm   rn   ro   r~   rq   rs   rt   extsr)   s              r   __apply_enabled_extensionsz0gp_gnome_settings_ext.__apply_enabled_extensions   s   IaL	*%%c$ii;;DM***&t}55!KK&|44G',,|5G'5QRRK#7###yy{{

70(V[[=N=N2NOOO

7/999+s## 	qLLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	T]###
TI{;;;;;s   "EEEorg/gnome/desktop/lockdownc                    |g }t          |          }	t          j                            |d|	|fz            }
|                    |
           t          |          }	t          j                            |d|	|fz            }|                    |           n|                    d          }|\  }
}t                      }|                    |           |                    |||           t          |
d          5 }|
                    |           d d d            n# 1 swxY w Y   t          |d          5 }|
                    d|d|           d d d            n# 1 swxY w Y   |S )Nz%010d-%sr`   r)   /)rG   r"   r#   r$   appendrh   r   ri   rj   rk   r.   )rO   ro   r&   r/   r   r   rn   rt   r   rq   r~   rp   rs   r)   s                 r   
__lockdownz gp_gnome_settings_ext.__lockdown   s   ?L&|44G',,|'1WdO'CE EK,,,&y11G7<<	:$+GHHD%%%%"==--L ,K7###

7C%%%+s## 	qLLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$__ 	/GGG-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s$   <DD"%D"9E!!E%(E%c           	         | j                             t          |           |          }||                    d          }ng }t	          | j                   t          | j                  }t          | j                  }|dk    r|Ht          |          }t          j
                            |d|z            }|                    |           n|\  }t          |d          5 }|                    d           |                    d           d d d            n# 1 swxY w Y   n|dk    r|                     ||dd	d
|          }n|dk    r|                     ||ddd
|          }n|dk    r|                     ||ddd
|          }na|dk    r|                     ||ddd|d          }n=|dk    r|                     ||ddd
|          }n|dk    r|                     ||ddd
|          }n|dk    rd}	t!          t          j
                            |	d                    }
t#          |
          dk    r	|
d          }
n t          j
                            |	d!          }
t          j
                            d"t          j
                            |
                    }| j        -t          j
                            | j        |dd                    }t          j        t          j
                            |          d#$           t+          j        t+          j        d%                    }t          j
                            |
          rt          |
d&                                          }t+          j        t+          j        |                    }|                                }|                    |                    d'                     |                    |                    d(                     |                    |                    d)                     nt+          j        |                                d'          }d*|_        t+          j        |                                d(          }d+|_        t+          j        |                                d)          }d,|_        t+          j        |                                d-          }d.|j        d/<   t+          j        |d0          }d1|_        t+          j        |d2          }d3|_        t+          j        |d4          }t+          j        |d5          }d6|_        t+          j        |d7          }d6|_        t+          j        |d8          }d9|_        t          |d:          5 }|                    |d;d#<           d d d            n# 1 swxY w Y   |                    |           ntA          j!        d=|           d S tE          | j                   | j         #                    t          |           |d                    |                     d S )>Nr`   zLock Down Enabled Extensionsr   r)   z$/org/gnome/shell/enabled-extensions
z"/org/gnome/shell/development-toolszDisable Printingprintingzdisable-printingrw   zDisable File Saving
filesavingzdisable-save-to-diskzDisable Command-Line Accesscmdlinezdisable-command-linez"Disallow Login Using a Fingerprintfingerprintreaderz!enable-fingerprint-authenticationr   zorg/gnome/login-screen)rt   zDisable User Logoutlogoutzdisable-log-outzDisable User Switchingzdisable-user-switchingzDisable Repartitioningz/usr/share/polkit-1/actionsz&org.freedesktop.[u|U][d|D]isks2.policyr   r   zorg.freedesktop.UDisks2.policyz/etc/share/polkit-1/actionsTr   policyconfigrbvendor
vendor_url	icon_namezThe Udisks Projectz*https://github.com/storaged-project/udiskszdrive-removable-mediaactionz%org.freedesktop.udisks2.modify-deviceiddescriptionzModify the drive settingsmessagez3Authentication is required to modify drive settingsdefaults	allow_anynoallow_inactiveallow_activeyeswbzUTF-8)encodingxml_declarationzUnable to apply)$re   rf   rg   rh   r3   r   r6   r'   rG   r"   r#   r$   r   rk   r.   r   r
   lenbasenamer%   r-   etreeElementTreeElementr,   read
fromstringgetrootfind
SubElementtextattribr   r   r   rl   )rO   rY   rn   r   ro   r&   rq   r~   r)   actionsudisk2
udisk2_etcxml_datarW   existing_xmlrootr   r   r   r   r   r   r   r   r   r   s                             r   __apply_enabledz%gp_gnome_settings_ext.__apply_enabled  sh   *%%c$ii33"==--LLLDM***&t}55$T]33	...*955 gll96H76RSS##K0000+k3'' >1?@@@<===> > > > > > > > > > > > > > > $$$??<J+=vwP PLL'''??<+7+A6+24 4LL ///??<I+A6+24 4LL 666??<+>+N+2G3K	 + M MLL
 '''??<H+<fgO OLL***??<H+CV+24 4LL ***3G"',,wBD D E EF6{{ag&FH H&C&(g&6&6v&>&>@ @J}(W\\$-ABBHH
K
33dCCCC(~)F)FGGHw~~f%% 9FD))..00$01A$1G1GHH''))L--h77888L--l;;<<<L--k::;;;;)(*:*:*<*<hGG2"-h.>.>.@.@,OO
"N
!,X-=-=-?-?MM	!8	%h&6&6&8&8(CCF"IFM$*6=AAK:K&vy99GPGL'
;;H(;??I!IN"-h8HIIN"&N +HnEEL %Lj$'' J1q7DIIIJ J J J J J J J J J J J J J J
++++I'+++FT]###
TAsxx'='=>>>>>s$   #+DD!DV66V:=V:c                     |                     d          D ]5}t          j                            |          rt          j        |           6d S )Nr`   )rh   r"   r#   r,   unlink)rO   fnamesr2   s      r   	__unapplyzgp_gnome_settings_ext.__unapplym  sN    \\#&& 	! 	!Ew~~e$$ !	%   	! 	!r   c                 ^    | j         |         fd                                D             S )Nc                 .    i | ]}|d k    ||         S )r]   rS   r<   irW   s     r   
<dictcomp>z6gp_gnome_settings_ext.__clean_data.<locals>.<dictcomp>t  s$    BBBq1	>>47>>>r   )rN   rM   )rO   rY   rW   s     @r   __clean_dataz"gp_gnome_settings_ext.__clean_datar  s2    &q)BBBBDIIKKBBBBr   Nc                 p   ||| _         |D ]\  }}| j                            |           t          |           |v rj|t          |                                                    D ]B\  }}|                     |           | j                            t          |           |           C| j                                         |D ]r}|j        rgd}	| j                            |j	                   d}
t          j                            |j        |
          }|                     |          }|sk|j        D ]}}|j                            |	          ra|j        rZd|j        vrQ| j        D ]4}|j                            |          r|                     ||            n5|                     |           ~| j                                        D ]g}| j        |         d         s|| j        d         k    r)|                     |                     |                     n|| j        d         k    r)|                     |                     |                     n|| j        d         k    r)|                     |                     |                     n|| j        d         k    r)|                     |                     |                     nO|| j        d	         k    r)|                     |                     |                     n|                     |           | j                                         itd S )
N!GNOME Settings\Lock Down SettingsMACHINE/Registry.pol
**delvals.r]   r   r   r}   r   r   )r   re   set_guidrg   items_gp_gnome_settings_ext__unapplyr+   commitfile_sys_pathr/   r"   r#   r$   parseentrieskeyname
startswithrW   rX   rM   endswith)_gp_gnome_settings_ext__add_lockdown_data,_gp_gnome_settings_ext__enable_lockdown_datarN   )_gp_gnome_settings_ext__apply_compose_key"_gp_gnome_settings_ext__clean_data&_gp_gnome_settings_ext__apply_dim_idle/_gp_gnome_settings_ext__apply_specific_settings1_gp_gnome_settings_ext__apply_whitelisted_account0_gp_gnome_settings_ext__apply_enabled_extensions%_gp_gnome_settings_ext__apply_enabled)rO   deleted_gpo_listchanged_gpo_listr   guidsettingsrm   valuegposection_namepol_filer#   pol_confrZ   rY   s                  r   process_group_policyz*gp_gnome_settings_ext.process_group_policyv  sK   $DM. 	  	 ND(J%%%4yyH$$(0T(;(A(A(C(C < <$IuNN5)))J%%c$ii;;;;J# $	( $	(C  #(C
##CH---1w||C$5x@@::d++ !) ; ;Ay++L99 ;af ;"!+55!% ; ;A y11!44 & $ 8 8A > > > %& !77:::05577 ( (A215i@ !  DIaL((001B1B11E1EFFFFdil**--d.?.?.B.BCCCCdil**66t7H7H7K7KLLLLdil**889J9J19M9MNNNNdil**778I8I!8L8LMMMM,,Q///J%%''''I$	( $	(r   c                 >  	 i }|j         rd}d}t          j                            |j         |          }|                     |          }|s|S |j        D ]}}|j                            |          ra|j        rZd|j	        vrQ| j
        D ]4}|j                            |          r|                     ||            n5|                     |           ~| j        
                                D ]}| j        |         d         rt          | j        |                   dk    rm|                     |          	t#          	fd	
                                D                       r%t%          	
                                          ||<   	||<   | j        |         ||<   |S )Nr   r   r   r]   r   c                 (    g | ]}||         k    S rS   rS   r   s     r   r>   z.gp_gnome_settings_ext.rsop.<locals>.<listcomp>  s!    BBBT!WBBBr   )r   r"   r#   r$   r   r   r   r   rW   rX   rM   r   r   r   rN   r   r   alllist)
rO   r   outputr   r   r#   r   rZ   rY   rW   s
            @r   rsopzgp_gnome_settings_ext.rsop  s    	??L-H7<< 18<<Dzz$''H % 7 79''55 7!& 7ak11!Y 7 79--a00 " 44Q:::!E" 33A666,1133 	? 	?*1-i8 ?421566::#0033BBBBdiikkBBBCC -(,TYY[[(9(9F1II(,F1II$($;A$>q	r   )r   rV   )__name__
__module____qualname__rL   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rQ   s   @r   rI   rI   G   s5           3 3 39 9 9
F F F
4K 4K 4Kl)A )A )AV< < <"G G G< < <. %A   .`? `? `?D! ! !
C C C
 '+0( 0( 0( 0(d      r   rI   )r7   )r"   r:   samba.gp.gpclassr   tempfiler   r   configparserr   
subprocessr   r   samba.commonr   r	   r
   xml.etree.ElementTreer   r   samba.gp.util.loggingr   r   r'   r3   r6   rG   rI   rS   r   r   <module>r      sT  "  ' ' ' ' ' ' ' ' ' ' ' '  % % % % % % " " " " " " " " . . . . . . . .       % % % % % % % % % % % % % % %
= 
= 
=  % % %  > > > >} } } } }J } } } } }r   