
    IdJ                         d dl Z d dlZd dlmZ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e      Zy)    N)
gp_pol_extgp_file_applier)NamedTemporaryFile)ConfigParser)PopenPIPE)	get_bytes
get_string)glob)logc                    | y t        j                  d      }|t        j                  d       y t	        |dgt
        t
              }|j                         \  }}|j                  dk7  r t        j                  dt        |             y y )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      st    LL!E}		=>uhT:A}}HC||q		*JsO<     c                     d}| #t         j                  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(   (   s;    -IGGLL9QR=9	KK	D)r   c                     d}| #t         j                  j                  | |dd        }t         j                  j                  |      ry t        j                  t         j                  j                  |      d       t        dt         j                  j                  |      d      5 }|j                  d       t        j                  |j                  d	       |j                  }d d d        t        j                  |       y # 1 sw Y    xY w)
Nz/etc/dconf/profile/userr   Tr    wF)dirdeletezuser-db:user
system-db:locali  )r#   r$   r%   existsr&   dirnamer   writechmodnamer   move)r   user_profiler*   fnames       r   create_user_profiler5   /   s    ,Lww||Hl12.>?	ww~~l#KK-=	CRWW__\%B#(
* -.	/0
	
 KK|$ s   '>DDc                     d}| #t         j                  j                  | |dd        }t        j                  |d       |S )Nz/etc/dconf/db/local.dr   Tr    r"   )r   local_dbs     r   create_local_dbr8   =   s:    &H77<<(12,7KK4(Or   c           
          t        j                  |       D cg c]  }t        j                  d|z  |       }}t	        |D cg c]  }|st        |j                  d            ! c}dgz         dz   S c c}w c c}w )Nz(\d+)%sr   r   )r#   listdirrematchmaxintgroup)	directoryr4   fconfigsms        r   select_next_confrD   D   sg    8:

98MN1rxx
U*A.NGN6AAAGGAJ6s:;A== O6s    A5A:A:c                   t     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dZd Z xZS )gp_gnome_settings_extc                 L    t        |   |  g d| _        i | _        d | _        y )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   rI   zgp_gnome_settings_ext.__init__I   s*    $+	
 #%r   c                      y)Nz!GNOME Settings/Lock Down Settings )rL   s    r   __str__zgp_gnome_settings_ext.__str__S   s    2r   c                     || j                   vri | j                   |<   |j                  | j                   |   |j                  <   y N)rK   data	valuename)rL   kes      r   __add_lockdown_dataz)gp_gnome_settings_ext.__add_lockdown_dataV   s=    D+++)+D##A&23&&"1;;/r   c                     |j                   | j                  vri | j                  |j                   <   |j                  dk(  | j                  |j                      d<   y )Nr   Enabled)rU   rK   rT   )rL   rW   s     r   __enable_lockdown_dataz,gp_gnome_settings_ext.__enable_lockdown_data[   sI    ;;d55535D##AKK0:;&&A+,Y7r   c                 p   t        | j                         t        | j                        }t        |d      }t        j
                  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'   |j                         vrt        j                  d(|       y t               }d)}|j                  |       |j                  |d*d+||d'      z         t        |d,      5 }|j                  |       d d d        t        | j                        }	t        |	      }t        j
                  j                  |	d|z        }
t        |
d,      5 }|j                  d-       d d d        t!        | j                         ||
gS # 1 sw Y   xY w# 1 sw Y   .xY w).Nz-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)r5   r   r8   rD   r#   r$   r%   rJ   r   r   r   add_sectionsetopenr/   r(   r   )rL   rT   local_db_dirconf_idr7   data_mapparsersectionr*   r'   locks              r   __apply_compose_keyz)gp_gnome_settings_ext.__apply_compose_key`   s2   DMM*&t}}5"<1AB77<< 5 ?A[. ,.B !. ./C	
 ^ )*> !/ ./D "? /0E !. ./C %m 23F n  n!" #N#& 
8==?2II2D937#

7MhtJ'788	:(C  	ALLO	 %T]]3	"9-ww||I'<w'FG$_ 	DGGBC	D 	T]]#$	 		D 	Ds   F -F, F),F5c                 H   t        | j                         t        | j                        }t        |d      }t        j
                  j                  |d|z        }t               }d}|j                  |       |j                  |dd       |j                  |dt        |d                t        |d      5 }|j                  |       d d d        t        |d	      }t        j
                  j                  |d
|z        }t               }d}|j                  |       |j                  |dd|d   z         t        |d      5 }|j                  |       d d d        t        | j                        }	t        |	      }t        j
                  j                  |	d|z        }
t        |
d      5 }|j                  d       |j                  d       |j                  d       d d d        t        | j                         |||
gS # 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   <xY w)Nz-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)r5   r   r8   rD   r#   r$   r%   r   ra   rb   strrc   r/   r(   r   )rL   rT   rd   re   local_power_dbrg   rh   r*   local_session_dbr'   ri   s              r   __apply_dim_idlez&gp_gnome_settings_ext.__apply_dim_idle   s   DMM*&t}}5"<:lMG4KL;7#

7J/

7-s48M3N/OP.#& 	!LLO	"<<77<<o6OP-7#

7L+W*EF"C( 	ALLO	 %T]]3	"9-ww||I';g'EF$_ 	=GGIJGGPQGG;<	=
 	T]]# 0$77+	 		 		= 	=s$   5G? H)4H?H	HH!c                 z   t        | j                         t        | j                        }t        |d      }t        j
                  j                  |d|z        }t        |d      5 }|j                         D ]  }|j                  d|z          	 d d d        t        | j                         |gS # 1 sw Y   !xY w)Nz-group-policyz%010d-group-policyr*   z%s
)r5   r   r(   rD   r#   r$   r%   rc   rJ   r/   r   )rL   rT   r'   re   policy_filer*   keys          r   __apply_specific_settingsz/gp_gnome_settings_ext.__apply_specific_settings   s    DMM*$T]]3	"9o>ggll9.BW.LM+s# 	&qyy{ &%&	& 	T]]#}		& 	&s   &*B11B:c                    t        | j                         t        | j                        }t        | j                        }ddj	                  |j                               z  }| j                  ||dd|d      }t        | j                         |S )Nr`   ', 'goazwhitelisted-providerszorg/gnome/online-accounts)r5   r   r8   r(   r%   rJ    _gp_gnome_settings_ext__lockdownr   )rL   rT   rd   r'   valpolicy_filess         r   __apply_whitelisted_accountz1gp_gnome_settings_ext.__apply_whitelisted_account   st    DMM*&t}}5$T]]3	TYY[11|Y'>'BD 	T]]#r   c                    t        | j                         t        | j                        }t        |      }t        j
                  j                  |d|z        }t               }d}|j                  |       |j                         }|j                  |dddj                  |      z         |j                  |dd       t        |d      5 }|j                  |       d d d        t        | j                         |gS # 1 sw Y   !xY w)	N%010d-extensionszorg/gnome/shellzenabled-extensionsr`   rw   zdevelopment-toolsfalser*   )r5   r   r8   rD   r#   r$   r%   r   ra   rJ   rb   rc   r/   r   )	rL   rT   rd   re   rs   rg   rh   extsr*   s	            r   __apply_enabled_extensionsz0gp_gnome_settings_ext.__apply_enabled_extensions   s    DMM*&t}}5"<0ggll<1Cg1MN#7#yy{

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

7/9+s# 	qLLO	T]]#}	 	s   
C<<Dc                 @   g }t        |      }t        j                  j                  |d||fz        }	|j	                  |	       t        |      }t        j                  j                  |d||fz        }
|j	                  |
       t               }|j                  |       |j                  |||       t        |	d      5 }|j                  |       d d d        t        |
d      5 }|j                  d|d|       d d d        |S # 1 sw Y   7xY w# 1 sw Y   |S xY w)Nz%010d-%sr*   /)
rD   r#   r$   r%   appendr   ra   rb   rc   r/   )rL   rd   r'   r1   rt   rz   rh   r{   re   rs   ri   rg   r*   s                r   
__lockdownz gp_gnome_settings_ext.__lockdown   s    "<0ggll<#-$#?AK("9-ww||IzWdO'CDD!7#

7C%+s# 	qLLO	$_ 	/GG-.	/		 		/s   ?D%DDDc                 
   g }t        | j                         t        | j                        }t        | j                        }|dk(  rxt	        |      }t
        j                  j                  |d|z        }|j                  |       t        |d      5 }|j                  d       |j                  d       d d d        n`|dk(  r| j                  ||ddd	      }nD|d
k(  r| j                  ||ddd	      }n(|dk(  r| j                  ||ddd	      }n|dk(  r| j                  ||dddd      }n|dk(  r| j                  ||ddd	      }n|dk(  r| j                  ||ddd	      }n|dk(  rd}t        t
        j                  j                  |d            }	t        |	      dk(  r|	d   }	n t
        j                  j                  |d       }	t
        j                  j                  d!t
        j                  j                  |	            }
| j                  -t
        j                  j                  | j                  |
dd        }
t        j                  t
        j                  j!                  |
      d"#       t#        j$                  t#        j&                  d$            }t
        j                  j)                  |	      rt        |	d%      j+                         }t#        j$                  t#        j,                  |            }|j/                         }|j                  |j1                  d&             |j                  |j1                  d'             |j                  |j1                  d(             nt#        j2                  |j/                         d&      }d)|_        t#        j2                  |j/                         d'      }d*|_        t#        j2                  |j/                         d(      }d+|_        t#        j2                  |j/                         d,      }d-|j6                  d.<   t#        j2                  |d/      }d0|_        t#        j2                  |d1      }d2|_        t#        j2                  |d3      }t#        j2                  |d4      }d5|_        t#        j2                  |d6      }d5|_        t#        j2                  |d7      }d8|_        t        |
d9      5 }|j                  |d:d";       d d d        |j                  |
       nt9        j:                  d<|       y t=        | j                         |S # 1 sw Y    xY w# 1 sw Y   UxY w)=NzLock Down Enabled Extensionsr~   r*   z$/org/gnome/shell/enabled-extensions
z"/org/gnome/shell/development-toolszDisable Printingprintingzdisable-printingrl   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)rh   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)r5   r   r8   r(   rD   r#   r$   r%   r   rc   r/   ry   r   lenbasenamer&   r.   etreeElementTreeElementr-   read
fromstringgetrootfind
SubElementtextattribr   r   r   )rL   rV   r{   rd   r'   re   rs   r*   actionsudisk2
udisk2_etcxml_datarT   existing_xmlrootr   r   r   r   r   r   r   r   r   r   s                            r   __apply_enabledz%gp_gnome_settings_ext.__apply_enabled   s   DMM*&t}}5$T]]3	..&y1G'',,y2Dw2NOK,k3' >1?@<=> > $$??<J+=vGL''??<+7+A6KL //??<I+A6KL66??<+>+N+23K	 + ML
 ''??<H+<fFL**??<H+CVML**3G"'',,wBD EF6{ag&FH&C&(gg&6&6v&>@J}}(WW\\$--ABH
KK
3dC((~)FGHww~~f%FD)..0$001A1A$1GH'')L--h78L--l;<L--k:;))(*:*:*<hG2"--h.>.>.@,O
"N
!,,X-=-=-?M	!8	%%h&6&6&8(CF"IFMM$**6=AK:K&&vy9GPGL''
;H((;?I!IN"--h8HIN"&N ++HnEL %Lj$' J1q7DIJ
+II'+T]]#U> >FJ Js   #T6U6T?Uc                 z    | j                   |   }|j                         D ci c]  }|dk7  s	|||    c}S c c}w )NrZ   )rK   rJ   )rL   rV   rT   is       r   __clean_dataz"gp_gnome_settings_ext.__clean_data@  s:    &&q)$(IIKBq1	>47
BBBs   
88c                 n   ||| _         |D ]W  \  }}t        |       |v s|t        |          j                         D ]  \  }}| j                  |||d        t	        |       Y |D ]J  }|j
                  sd}	d}
t        j                  j                  |j
                  |
      }| j                  |      }|sS|j                  D ]  }|j                  j                  |	      s|j                  s,d|j                  vs;| j                  D ]1  }|j                  j!                  |      s| j#                  ||        z | j%                  |        | j&                  j                         D ]  }| j&                  |   d   s| j)                  |j*                  |       4t        | j&                  |         }| j-                  |      }|| j                  d   k(  r;| j/                  |j*                  ||| j0                  | j3                  |      d       || j                  d	   k(  r;| j/                  |j*                  ||| j4                  | j3                  |      d       || j                  d
   k(  r<| j/                  |j*                  ||| j6                  | j3                  |      d       E|| j                  d   k(  r<| j/                  |j*                  ||| j8                  | j3                  |      d       || j                  d   k(  r<| j/                  |j*                  ||| j:                  | j3                  |      d       | j/                  |j*                  ||| j<                  |d        | j)                  |j*                  | j&                  j                                M y )N;)sep!GNOME Settings\Lock Down SettingsMACHINE/Registry.pol
**delvals.rZ   )remover   r            )keep)r   rn   itemsunapplyr   file_sys_pathr#   r$   r%   parseentrieskeyname
startswithrT   rU   rJ   endswith)_gp_gnome_settings_ext__add_lockdown_data,_gp_gnome_settings_ext__enable_lockdown_datarK   cleanr1   generate_value_hashapply)_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)rL   deleted_gpo_listchanged_gpo_listr   guidsettings	attributevaluegposection_namepol_filer$   pol_confrW   rV   rT   
value_hashs                    r   process_group_policyz*gp_gnome_settings_ext.process_group_policyD  sk   $DM. 	'ND(4yH$(0T(;(A(A(C B$IuLLy%SLABX&		' $ 5	JC  C1ww||C$5$5x@::d+!)) ;Ayy++L9aff"!++5!% ;A yy11!4 $ 8 8A > %;
 !77:; 00557 !/A2215i@

388A
6  t66q9:D!%!9!9$!?JDIIaL(

388Q
#'#;#;#'#4#4Q#7S # B diil*

388Q
#'#8#8#'#4#4Q#7S # B diil*

388Q
#'#A#A#'#4#4Q#7S # B diil*

388Q
#'#C#C#'#4#4Q#7S # B diil*

388Q
#'#B#B#'#4#4Q#7S # B 

388Q
#'#7#7#$# # /?!/H 

388$*A*A*F*F*H
Ik5	Jr   c           	      h   i }|j                   rd}d}t        j                  j                  |j                   |      }| j	                  |      }|s|S |j
                  D ]  }|j                  j                  |      s|j                  s,d|j                  vs;| j                  D ]1  }|j                  j                  |      s| j                  ||        z | j                  |        | j                  j                         D ]  }| j                  |   d   st        | j                  |         dkD  ra| j!                  |      }	t#        |	j                         D 
cg c]
  }
|
|	|
   k(   c}
      rt%        |	j                               ||<   |	||<   | j                  |   ||<    |S c c}
w )Nr   r   r   rZ   r   )r   r#   r$   r%   r   r   r   r   rT   rU   rJ   r   r   r   rK   r   r   alllist)rL   r   outputr   r   r$   r   rW   rV   rT   r   s              r   rsopzgp_gnome_settings_ext.rsop  s   ?L-H77<< 1 18<Dzz$'H%% 799''5!&&akk1!YY 799--a0 44Q:!7
 33A67 ,,113 	?**1-i8422156:#003diikBT!WBC(,TYY[(9F1I(,F1I$($;$;A$>q		?   Cs    F/
)zorg/gnome/desktop/lockdownrS   )__name__
__module____qualname__rI   rQ   r   r   r   r   r   r   r   ry   r   r   r   r   __classcell__)rN   s   @r   rF   rF   H   s[    39
F
- ^8B		" 8&UnC
 '+?JBr   rF   ) )r#   r;   samba.gp.gpclassr   r   tempfiler   r   configparserr   
subprocessr   r   samba.commonr	   r
   r   xml.etree.ElementTreer   r   samba.gp.util.loggingr   r   r(   r5   r8   rD   rF   rP   r   r   <module>r      sQ   "  8 '  % " .  % % %
=%>YJ Yr   