
    g8                     v    S SK Jr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJrJr  S SKJr   " S S	\5      rg)
    N)ldb)system_session)security)
ndr_unpack)CommandCommandErrorOption)SamDBc            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS\SS	S
9/rSS/r  SS jrSrg)cmd_user_setprimarygroup   aI  Set the primary group a user account.

This command sets the primary group a user account. The username specified on
the command is the sAMAccountName. The primarygroupname is the sAMAccountName
of the new primary group. The user must be a member of the group.

The command may be run from the root userid or another authorized userid. The
-H or --URL= option can be used to execute the command against a remote server.

Example1:
samba-tool user setprimarygroup TestUser1 newPrimaryGroup --URL=ldap://samba.samdom.example.com -Uadministrator%passw1rd

Example1 shows how to set the primary group for TestUser1 on a remote LDAP
server. The --URL parameter is used to specify the remote target server.  The
-U option is used to pass the username and password of a user that exists on
the remote server and is authorized to update the server.
z-%prog <username> <primarygroupname> [options])	sambaoptsversionoptscredoptsz-Hz--URLz%LDB URL for database or target serverURLH)helptypemetavardestusernameprimarygroupnameNc           	      p   UR                  5       nUR                  U5      n[        U[        5       XS9n	S[        R
                  " U5      -  n
 U	R                  U	R                  5       U
[        R                  S// SQS9nUS   R                  SSS9n[        [        R                  U5      nUR                  5       u  pS	U-  n[        US   R                  S
SS95      nUS   R                  S5      nUc  / n/ nU H_  n[        R"                  " U	[%        U5      5      nUR'                  S5      n[        [        R                  U5      nUR)                  U5        Ma     S[        R
                  " U5      -  n
 U	R                  U	R                  5       U
[        R                  S/S9nUS   R                  SSS9n[        [        R                  U5      nUR                  5       u  nnUU:w  a  [!        SU-  5      eUU:w  a  UU;  a  [!        SU< SU< S35      eSUUU4-  n U	R+                  U5        U R.                  R1                  SU-  5        g ! [         a    [!        SU-  5      ef = f! [         a    [!        SU-  5      ef = f! [,         a  n[!        SU< SU< SU< 35      eS nAff = f)N)urlsession_infocredentialslpz((&(sAMAccountName=%s)(objectClass=user))zextended_dn:1:1)	objectSidmemberOfprimaryGroupID)base
expressionscopecontrolsattrsr   r   )idxz<SID=%s>r    r   zUnable to find user '%s'SIDz)(&(sAMAccountName=%s)(objectClass=group)))r!   r"   r#   r%   zUnable to find group '%s'z/Group '%s' does not belong to the user's domainzUser 'z' is not member of group ''zl
dn: %s
changetype: modify
delete: primaryGroupID
primaryGroupID: %u
add: primaryGroupID
primaryGroupID: %u
zFailed to set primary group 'z' for user 'z': zChanged primary group to '%s'
)get_loadparmget_credentialsr
   r   r   binary_encodesearch	domain_dnSCOPE_SUBTREEgetr   r   dom_sidsplitint
IndexErrorr   Dnstrget_extended_componentappendmodify_ldif	Exceptionoutfwrite)selfr   r   r   r   r   r   r   credssamdbfilterresuser_sid_binaryuser_siduser_dom_siduser_riduser_sid_dn	user_pgiduser_groupsuser_group_sids
user_groupuser_group_dnuser_group_binary_siduser_group_sidgroup_sid_binaryprimarygroup_sidprimarygroup_dom_sidprimarygroup_ridsetprimarygroup_ldifmsgs                                 C/usr/lib/python3/dist-packages/samba/netcmd/user/setprimarygroup.pyruncmd_user_setprimarygroup.run@   s    ##%((,!.*:"'0 =##H-.	H,,EOO$5*0%(%6%6):(;&8	  9C "!fjj!j<O!("2"2ODH'/~~'7$\$x/KCFJJ'7QJ?@Ia&**Z0K"  %JFF5#j/:M$1$H$H$O!'(8(8:OPN"">2	 & >##$456	Q,,EOO$5*0%(%6%6&1]  4C  #1vzz+1z= &h&6&68HI3C3I3I3K0	///  (*: ; < < y(-=_-T (*: < = =  I/0 1	B23
 			9<LLM_  	H9XFGG	H$  	Q:>NOPP	Q2  	B 0(C A B B	Bs2   B+I ;AI3 'J I03J
J5J00J5 )NNNN)__name__
__module____qualname____firstlineno____doc__synopsisoptionsSambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr	   r5   takes_options
takes_argsrT   __static_attributes__rV       rS   r   r      sm    " ?H ))--.. 	tW#JQT3	(
M
 01JGK $JNre   r   )samba.getoptgetoptr]   sambar   
samba.authr   samba.dcerpcr   	samba.ndrr   samba.netcmdr   r   r	   samba.samdbr
   r   rV   re   rS   <module>rn      s/   ,   % !   6 6 kNw kNre   