#128479 - 2004-10-27 06:34 PM
MemberOf() - A better InGroup function
|
ebiard
Fresh Scripter
Registered: 2003-03-13
Posts: 14
|
; Function : MemberOf()
;
; Author : Emmanuel Biard
; Contributor : Howard A. Bullock for some part of his TranslateName() function
;
; Action : MembreDe function tests if a user is member of a group (directly or not)
;
; Syntax : MemberOf(Group[, User])
;
; Version : 1.0
; Date : 27 december 2004
; Date revised : -
;
; Parameters :
; - Group, name of the group
; - User, name of the user (@USERID if not specified)
;
; Remarks : This function was created because the built-in InGroup kix function is not reliable at all, neither for direct membership tests nor for indirect ones.
;
; Returns :
; 0 if the user is not member of the group
; 1 if the user is member of the group
;
; Dependencies : LDAP directory
; KiXtart version : 4.20
;
; Example : if MemberOf("ThisGroup", "ThisUser")
;
Function NomComplet($NomCourt)
$NomComplet = ""
$oNomComplet = CreateObject("NameTranslate")
If Not(@ERROR)
$oNomComplet.Init(3, "")
If Not(@ERROR)
$oNomComplet.Set (3,$NomCourt)
If Not(@ERROR)
$NomComplet = $oNomComplet.Get(1)
EndIf
EndIf
EndIf
EndFunction
Function RecursifMembreDe($Groupe, $User)
$LDAPGroupe = NomComplet("@DOMAIN\"+$Groupe)
$oGroupe = GetObject("LDAP://" + $LDAPGroupe)
If Not(@ERROR)
For Each $Objet In $oGroupe.Members
Select
Case $Objet.Class = "group"
$Result = RecursifMembreDe($Objet.cn, $User)
If ($Result = 1)
$RecursifMembreDe = 1
Return
EndIf
Case $Objet.Class = "user"
If ($Objet.samAccountName == @USERID)
$RecursifMembreDe = 1
Return
EndIf
EndSelect
Next
EndIf
$RecursifMembreDe = 0
EndFunction
Function MemberOf($Groupe, OPTIONAL $User)
If ($User = "")
$User = @USERID
EndIf
$MemberOf = RecursifMembreDe($Groupe, $User)
EndFunction
Edited by ebiard (2004-10-27 06:53 PM)
|
Top
|
|
|
|
#128481 - 2004-10-27 07:00 PM
Re:
|
ebiard
Fresh Scripter
Registered: 2003-03-13
Posts: 14
|
I'm sorry not to understand what you mean buy "this is not an UDF", that i have to "strip it down to UDF" (I'm french !). Please explain me with more details. And for the header, the link to use the correct header does not work. I've rebuilt the header to be more close of what is recommended.
|
Top
|
|
|
|
#128488 - 2004-10-28 12:24 PM
Re: MemberOf() - A better InGroup function
|
ebiard
Fresh Scripter
Registered: 2003-03-13
Posts: 14
|
Ok i've understood the problem that a UDF must be one function.
For the link that does not work, it is the link for postprep zip that brings to a 404 censored page, but maybe i don't need it.
NTDOC, I can assure u the InGroup function is not reliable, and 4.20 is not a dependancy but the kix32 version used. 4.22 does not change anything on this point.
I modified the code to obtain a unique function.
Do what you want of it.
Bye.
Code:
Function MemberOf($Groupe, OPTIONAL $User)
;
; IF THE USER IS NOT SPECIFIED, CURRENT USER IS USED
If ($User = "")
$User = @USERID
EndIf
;
; RETRIEVES THE FULL QUALIFIED NAME OF THE GROUP
$LDAPGroupe = ""
$oLDAPGroupe = CreateObject("NameTranslate")
If Not(@ERROR)
$oLDAPGroupe.Init(3, "")
If Not(@ERROR)
$oLDAPGroupe.Set(3,"@DOMAIN\"+$Groupe)
If Not(@ERROR)
$LDAPGroupe = $oLDAPGroupe.Get(1)
EndIf
EndIf
EndIf
;
; CONNECTION TO THE GROUP
$oGroupe = GetObject("LDAP://" + $LDAPGroupe)
;
; BROWSE GROUP MEMBERS
If Not(@ERROR)
For Each $Objet In $oGroupe.Members
Select
;
; IF THE MEMBER IS A GROUP, RECURSIVELY GOES ON
Case $Objet.Class = "group"
$Result = MemberOf($Objet.cn, $User)
If ($Result = 1)
$MemberOf= 1
Return
EndIf
; IF THE MEMBER IS A USER, IS IT THE ONE ?
Case $Objet.Class = "user"
If ($Objet.samAccountName == @USERID)
$MemberOf= 1
Return
EndIf
EndSelect
Next
EndIf
$MemberOf = 0
EndFunction
Edited by ebiard (2004-10-28 01:26 PM)
|
Top
|
|
|
|
#193607 - 2009-04-27 04:17 PM
Re: MemberOf() - A better InGroup function
[Re: Lonkero]
|
bekickst
Fresh Scripter
Registered: 2009-02-17
Posts: 6
Loc: Berlin Germany
|
I had the same problem Lonkero. When I tested the skript on my own computer, the group membership was corrected when I logged on again and ran the skript (including /f). It didn`t work on some other Computers though. In the end I used the function memberof, that I found here. Now its working perfectly.
It`s not a bug. Itīs a feature.
Edited by bekickst (2009-04-27 04:20 PM)
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 381 anonymous users online.
|
|
|