Documentation
¶
Index ¶
- Constants
- Variables
- func AddEntriesToRequest(req *ldap.AddRequest, entries AttrEntries)
- func Capitalize(str string) string
- func CnUidOrDN(object string) (string, bool)
- func ConvertGUID(portion string) string
- func ConvertSID(hexSID string) (SID string)
- func EncodeGUID(guid string) (string, error)
- func EncodeSID(sid string) (string, error)
- func EndianConvert(sd string) (newSD string)
- func FormatDuration(d time.Duration) string
- func FormatLDAPTime(val, format string, offset int) string
- func FormatLDAPTime2(val, format string, offset int) string
- func GuessQueryFilter(identifier string, flavor LDAPFlavor) string
- func HexToDecimalString(hex string) (decimal string)
- func HexToInt(hex string) (integer int)
- func HexToOffset(hex string) (integer int64)
- func HexToUint32(hex string) uint32
- func IndexOf[T comparable](collection []T, el T) int
- func IsSID(s string) bool
- func LoadClientCertPEM(certFile, keyFile string) (*x509.Certificate, any, error)
- func LoadClientCertPFX(pfxFile string) (*x509.Certificate, any, error)
- func ParseMSDuration(val string) (time.Duration, error)
- func ParseSystemFlags(v uint32) []string
- func ParseUACFlags(uacInt int) []string
- func ResolveDCServer(ctx context.Context, domain string, resolver adauth.Resolver) (string, error)
- func SamOrDN(object string) (string, bool)
- type AttrEntries
- type ConnectParams
- type ControlMicrosoftSDFlags
- type FormattedAttr
- type FormattedAttrValue
- type LDAPConn
- func ExternalBind(ctx context.Context, p ConnectParams, cert *x509.Certificate, key any) (*LDAPConn, error)
- func KerbBindWithAESKey(ctx context.Context, p ConnectParams, domain, username, aesKeyHex string) (*LDAPConn, error)
- func KerbBindWithCCache(ctx context.Context, p ConnectParams, ccachePath, domain, username string) (*LDAPConn, error)
- func KerbBindWithNTHash(ctx context.Context, p ConnectParams, domain, username, ntHash string) (*LDAPConn, error)
- func KerbBindWithPKINIT(ctx context.Context, p ConnectParams, domain, username string, ...) (*LDAPConn, error)
- func KerbBindWithPassword(ctx context.Context, p ConnectParams, domain, username, password string) (*LDAPConn, error)
- func LDAPBind(ctx context.Context, p ConnectParams, identity, password string) (*LDAPConn, error)
- func NTLMBindWithHash(ctx context.Context, p ConnectParams, domain, username, ntHash string) (*LDAPConn, error)
- func NTLMBindWithPassword(ctx context.Context, p ConnectParams, domain, username, password string) (*LDAPConn, error)
- func (lc *LDAPConn) AddADIDNSNode(nodeName string, zoneDN string, records []adidns.DNSRecord) (string, error)
- func (lc *LDAPConn) AddADIDNSRecords(nodeDN string, records []adidns.DNSRecord) error
- func (lc *LDAPConn) AddADIDNSZone(objectName string, props []adidns.DNSProperty, isForest bool) (string, error)
- func (lc *LDAPConn) AddAttribute(targetDN string, attributeToAdd string, attributeValues []string) error
- func (lc *LDAPConn) AddComputer(objectName string, parentDN string, dynamicTTL int) error
- func (lc *LDAPConn) AddContainer(objectName string, parentDN string, dynamicTTL int) error
- func (lc *LDAPConn) AddGroup(objectName string, parentDN string, dynamicTTL int) error
- func (lc *LDAPConn) AddMemberToGroup(memberDN string, groupDN string) error
- func (lc *LDAPConn) AddOrganizationalUnit(objectName string, parentDN string, dynamicTTL int) error
- func (lc *LDAPConn) AddUser(objectName string, parentDN string, dynamicTTL int) error
- func (lc *LDAPConn) DeleteAttribute(targetDN string, attributeToDelete string) error
- func (lc *LDAPConn) DeleteAttributeValues(targetDN string, targetAttribute string, valuesToDelete []string) error
- func (lc *LDAPConn) DeleteObject(targetDN string) error
- func (lc *LDAPConn) FindFirst(identifier string) (*ldap.Entry, error)
- func (lc *LDAPConn) FindFirstAttr(filter string, attr string) (string, error)
- func (lc *LDAPConn) FindNamingContexts() ([]string, error)
- func (lc *LDAPConn) FindPrimaryGroupForSID(SID string) (groupSID string, err error)
- func (lc *LDAPConn) FindRootDN() (string, error)
- func (lc *LDAPConn) FindRootFQDN() (string, error)
- func (lc *LDAPConn) FindSIDForObject(object string) (SID string, err error)
- func (lc *LDAPConn) FindSamForSID(SID string) (resolvedSID string, err error)
- func (lc *LDAPConn) FindSchemaClassesAndAttributes() (map[string]string, map[string]string, error)
- func (lc *LDAPConn) FindSchemaControlAccessRights(filter string) (map[string]string, error)
- func (lc *LDAPConn) GetADIDNSNode(nodeDN string) (adidns.DNSNode, error)
- func (lc *LDAPConn) GetADIDNSNodes(zoneDN string) ([]adidns.DNSNode, error)
- func (lc *LDAPConn) GetADIDNSZones(name string, isForest bool) ([]adidns.DNSZone, error)
- func (lc *LDAPConn) GetSecurityDescriptor(object string, showDeleted bool) (queryResult string, err error)
- func (lc *LDAPConn) GuessFlavor()
- func (lc *LDAPConn) ModifyAttribute(targetDN string, attributeToModify string, attributeValues []string) error
- func (lc *LDAPConn) ModifyDACL(objectName string, newSD string) error
- func (lc *LDAPConn) MoveObject(sourceDN string, targetDN string) error
- func (lc *LDAPConn) Query(baseDN string, searchFilter string, scope int, showDeleted bool) ([]*ldap.Entry, error)
- func (lc *LDAPConn) QueryFirst(filter string) (*ldap.Entry, error)
- func (lc *LDAPConn) QueryGroupMembers(groupDN string) (group []*ldap.Entry, err error)
- func (lc *LDAPConn) QueryGroupMembersBasic(groupDN string) ([]string, error)
- func (lc *LDAPConn) QueryGroupMembersDeep(groupDN string, maxDepth int) (group []*ldap.Entry, err error)
- func (lc *LDAPConn) QueryObjectGroups(memberDN string) ([]*ldap.Entry, error)
- func (lc *LDAPConn) QueryObjectGroupsBasic(memberDN string) ([]*ldap.Entry, error)
- func (lc *LDAPConn) QueryObjectGroupsDeep(objectDN string, maxDepth int) (group []*ldap.Entry, err error)
- func (lc *LDAPConn) QueryWithAttrs(baseDN string, searchFilter string, scope int, showDeleted bool, ...) ([]*ldap.Entry, error)
- func (lc *LDAPConn) RemoveMemberFromGroup(memberDN string, groupDN string) error
- func (lc *LDAPConn) ReplaceADIDNSRecords(nodeDN string, records []adidns.DNSRecord) error
- func (lc *LDAPConn) ResetPassword(objectDN string, newPassword string) error
- func (lc *LDAPConn) UpgradeToTLS(tlsConfig *tls.Config) error
- type LDAPFlavor
- type LibQuery
Constants ¶
const ( UAC_SCRIPT = 0x00000001 UAC_ACCOUNTDISABLE = 0x00000002 UAC_HOMEDIR_REQUIRED = 0x00000008 UAC_LOCKOUT = 0x00000010 UAC_PASSWD_NOTREQD = 0x00000020 UAC_PASSWD_CANT_CHANGE = 0x00000040 UAC_ENCRYPTED_TEXT_PWD_ALLOWED = 0x00000080 UAC_TEMP_DUPLICATE_ACCOUNT = 0x00000100 UAC_NORMAL_ACCOUNT = 0x00000200 UAC_INTERDOMAIN_TRUST_ACCOUNT = 0x00000800 UAC_WORKSTATION_TRUST_ACCOUNT = 0x00001000 UAC_SERVER_TRUST_ACCOUNT = 0x00002000 UAC_DONT_EXPIRE_PASSWORD = 0x00010000 UAC_MNS_LOGON_ACCOUNT = 0x00020000 UAC_SMARTCARD_REQUIRED = 0x00040000 UAC_TRUSTED_FOR_DELEGATION = 0x00080000 UAC_NOT_DELEGATED = 0x00100000 UAC_USE_DES_KEY_ONLY = 0x00200000 UAC_DONT_REQ_PREAUTH = 0x00400000 UAC_PASSWORD_EXPIRED = 0x00800000 UAC_TRUSTED_TO_AUTH_FOR_DELEGATION = 0x01000000 UAC_PARTIAL_SECRETS_ACCOUNT = 0x04000000 )
Constants for userAccountControl flags
const ( SE_DACL_AUTO_INHERIT_REQ = 0x00000100 SE_DACL_AUTO_INHERITED = 0x00000400 SE_DACL_SACL_DEFAULTED = 0x00000008 SE_DACL_PRESENT = 0x00000004 SE_DACL_PROTECTED = 0x00001000 SE_GROUP_DEFAULTED = 0x00000002 SE_OWNER_DEFAULTED = 0x00000001 SE_RM_CONTROL_VALID = 0x00004000 SE_SACL_AUTO_INHERIT_REQ = 0x00000200 SE_SACL_AUTO_INHERITED = 0x00000800 SE_SACL_PRESENT = 0x00000010 SE_SACL_PROTECTED = 0x00002000 SE_SELF_RELATIVE = 0x00008000 )
Constants for Security Descriptor's Control Flags
Variables ¶
var EmojiMap = map[string]string{
"root": "🌳",
"user": "👤",
"computer": "💻️",
"group": "👥",
"organizationalUnit": "📂",
"container": "📁",
"groupOfNames": "📇",
"domain": "🌐",
"domainDNS": "🔗",
"builtinDomain": "🏠",
"groupPolicyContainer": "⚙️",
"foreignSecurityPrincipal": "🌍",
"contact": "📞",
"printQueue": "🖨️",
"volume": "📦",
"publicFolder": "📬",
"serviceConnectionPoint": "🔌",
"msExchExchangeServer": "📧",
"msExchStorageGroup": "🗃️",
"subnet": "🕸️",
"site": "📍",
"groupOfUniqueNames": "📇",
"device": "💻",
"posixAccount": "🆔",
"organization": "🏢",
}
var GroupTypeMap = map[int]string{
2: "Global Distribution Group",
4: "Domain Local Distribution Group",
8: "Universal Distribution Group",
-2147483646: "Global Security Group",
-2147483644: "Domain Local Security Group",
-2147483643: "Builtin Group",
-2147483640: "Universal Security Group",
}
groupType descriptions
var InstanceTypeMap = map[int]string{
1: "NamingContextHead",
2: "NotInstantiatedReplica",
4: "WritableObject",
8: "ParentNamingContextHeld",
16: "FirstNamingContextConstruction",
32: "NamingContextRemovalFromDSA",
}
instanceType descriptions
var PredefinedLdapQueriesAD = map[string][]LibQuery{
"Enum": {
{Title: "All Organizational Units", Filter: "(objectCategory=organizationalUnit)"},
{Title: "All Containers", Filter: "(objectCategory=container)"},
{Title: "All Groups", Filter: "(objectCategory=group)"},
{Title: "All Computers", Filter: "(objectClass=computer)"},
{Title: "All Users", Filter: "(&(objectCategory=person)(objectClass=user))"},
{Title: "All Objects", Filter: "(objectClass=*)"},
},
"Users": {
{Title: "Recently Created Users", Filter: "(&(objectCategory=user)(whenCreated>=<timestamp1d>))"},
{Title: "Users With Description", Filter: "(&(objectCategory=user)(description=*))"},
{Title: "Users Without Email", Filter: "(&(objectCategory=user)(!(mail=*)))"},
{Title: "Likely Service Users", Filter: "(&(objectCategory=user)(sAMAccountName=*svc*))"},
{Title: "Disabled Users", Filter: "(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=2))"},
{Title: "Expired Users", Filter: "(&(objectCategory=user)(accountExpires<=<timestamp>))"},
{Title: "Users With Sensitive Infos", Filter: "(&(objectCategory=user)(|(telephoneNumber=*)(pager=*)(homePhone=*)(mobile=*)(info=*)(streetAddress=*)))"},
{Title: "Inactive Users", Filter: "(&(objectCategory=user)(lastLogonTimestamp<=<timestamp30d>))"},
},
"Computers": {
{Title: "Domain Controllers", Filter: "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))"},
{Title: "Non-DC Servers", Filter: "(&(objectCategory=computer)(operatingSystem=*server*)(!(userAccountControl:1.2.840.113556.1.4.803:=8192)))"},
{Title: "Non-Server Computers", Filter: "(&(objectCategory=computer)(!(operatingSystem=*server*))(!(userAccountControl:1.2.840.113556.1.4.803:=8192)))"},
{Title: "Stale Computers", Filter: "(&(objectCategory=computer)(!lastLogonTimestamp=*))"},
{Title: "Computers With Outdated OS", Filter: "(&(objectCategory=computer)(|(operatingSystem=*Server 2008*)(operatingSystem=*Server 2003*)(operatingSystem=*Windows XP*)(operatingSystem=*Windows 7*)))"},
},
"Security": {
{Title: "High Privilege Users", Filter: "(&(objectCategory=user)(adminCount=1))"},
{Title: "Users With SPN", Filter: "(&(objectCategory=user)(servicePrincipalName=*))"},
{Title: "Users With SIDHistory", Filter: "(&(objectCategory=person)(objectClass=user)(sidHistory=*))"},
{Title: "KrbPreauth Disabled Users", Filter: "(&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=4194304))"},
{Title: "KrbPreauth Disabled Computers", Filter: "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=4194304))"},
{Title: "Constrained Delegation Objects", Filter: "(msDS-AllowedToDelegateTo=*)"},
{Title: "Unconstrained Delegation Objects", Filter: "(userAccountControl:1.2.840.113556.1.4.803:=524288)"},
{Title: "RBCD Objects", Filter: "(msDS-AllowedToActOnBehalfOfOtherIdentity=*)"},
{Title: "Not Trusted For Delegation", Filter: "(&(samaccountname=*)(userAccountControl:1.2.840.113556.1.4.803:=1048576))"},
{Title: "Shadow Credentials Targets", Filter: "(msDS-KeyCredentialLink=*)"},
{Title: "Must Change Password Users", Filter: "(&(objectCategory=person)(objectClass=user)(pwdLastSet=0)(!(useraccountcontrol:1.2.840.113556.1.4.803:=2)))"},
{Title: "Password Never Changed Users", Filter: "(&(objectCategory=user)(pwdLastSet=0))"},
{Title: "Never Expire Password Users", Filter: "(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))"},
{Title: "Users with PASSWD_NOTREQD", Filter: "(&(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=32))"},
{Title: "LockedOut Users", Filter: "(&(objectCategory=user)(lockoutTime>=1))"},
{Title: "Trusted Domains", Filter: "(objectClass=trustedDomain)"},
{Title: "ADCS Enterprise CAs", Filter: "(objectClass=pKIEnrollmentService)", BaseDN: "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com"},
{Title: "ADCS Certificate Templates", Filter: "(objectClass=pKICertificateTemplate)", BaseDN: "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com"},
},
"Group Members": {
{Title: "Enterprise Admins", Filter: "(memberOf=CN=Enterprise Admins,CN=Users,DC=domain,DC=com)"},
{Title: "Administrators", Filter: "(memberOf=CN=Administrators,CN=Builtin,DC=domain,DC=com)"},
{Title: "Domain Admins", Filter: "(memberOf=CN=Domain Admins,CN=Users,DC=domain,DC=com)"},
{Title: "Schema Admins", Filter: "(memberOf=CN=Schema Admins,CN=Users,DC=domain,DC=com)"},
{Title: "DNS Admins", Filter: "(memberOf=CN=DnsAdmins,CN=Users,DC=domain,DC=com)"},
{Title: "Server Operators", Filter: "(memberOf=CN=Server Operators,CN=Builtin,DC=domain,DC=com)"},
{Title: "Backup Operators", Filter: "(memberOf=CN=Backup Operators,CN=Builtin,DC=domain,DC=com)"},
{Title: "Account Operators", Filter: "(memberOf=CN=Account Operators,CN=Builtin,DC=domain,DC=com)"},
{Title: "WinRMRemoteWMIUsers__", Filter: "(memberOf=CN=WinRMRemoteWMIUsers__,CN=Users,DC=domain,DC=com)"},
{Title: "Group Policy Creator Owners", Filter: "(memberOf=CN=Group Policy Creator Owners,CN=Users,DC=domain,DC=com)"},
{Title: "Remote Desktop Users", Filter: "(memberOf=CN=Remote Desktop Users,CN=Builtin,DC=domain,DC=com)"},
{Title: "Remote Management Users", Filter: "(memberOf=CN=Remote Management Users,CN=Builtin,DC=domain,DC=com)"},
{Title: "Print Operators", Filter: "(memberOf=CN=Print Operators,CN=Builtin,DC=domain,DC=com)"},
{Title: "DHCP Administrators", Filter: "(memberOf=CN=DHCP Administrators,CN=Users,DC=domain,DC=com)"},
{Title: "Hyper-V Administrators", Filter: "(memberOf=CN=Hyper-V Administrators,CN=Builtin,DC=domain,DC=com)"},
{Title: "Cert Publishers", Filter: "(memberOf=CN=Cert Publishers,CN=Users,DC=domain,DC=com)"},
{Title: "Protected Users", Filter: "(memberOf=CN=Protected Users,CN=Users,DC=domain,DC=com)"},
},
}
var PredefinedLdapQueriesBasic = map[string][]LibQuery{
"Enum": {
{Title: "All Organizations", Filter: "(objectClass=organization)"},
{Title: "All Users", Filter: "(|(objectClass=inetOrgPerson)(objectClass=posixAccount)(objectClass=person))"},
{Title: "All Groups", Filter: "(|(objectClass=posixGroup)(objectClass=groupOfNames)(objectClass=groupOfUniqueNames))"},
{Title: "All Computers", Filter: "(|(objectClass=ipHost)(objectClass=device))"},
{Title: "All Organizational Units", Filter: "(objectClass=organizationalUnit)"},
{Title: "All Organizational Roles", Filter: "(objectClass=organizationalRole)"},
{Title: "All Sudo Roles", Filter: "(objectClass=sudoRole)"},
{Title: "All Netgroups", Filter: "(objectClass=nisNetgroup)"},
{Title: "All Objects", Filter: "(objectClass=*)"},
},
"Users": {
{Title: "Users With Email", Filter: "(&(mail=*)(|(objectClass=inetOrgPerson)(objectClass=posixAccount)(objectClass=person)))"},
{Title: "Users With Phone Number", Filter: "(&(telephoneNumber=*)(|(objectClass=inetOrgPerson)(objectClass=posixAccount)(objectClass=person)))"},
{Title: "Users With Home Directory", Filter: "(&(homeDirectory=*)(|(objectClass=inetOrgPerson)(objectClass=posixAccount)(objectClass=person)))"},
{Title: "Users With UID", Filter: "(&(uid=*)(|(objectClass=inetOrgPerson)(objectClass=posixAccount)(objectClass=person)))"},
{Title: "Users With Password", Filter: "(userPassword=*)"},
{Title: "Users With SSH Keys", Filter: "(sshPublicKey=*)"},
},
"Groups": {
{Title: "Groups With Members (groupOfNames)", Filter: "(&(objectClass=groupOfNames)(member=*))"},
{Title: "Groups With Members (posixGroup)", Filter: "(&(objectClass=posixGroup)(memberUid=*))"},
{Title: "Groups With Members (groupOfUniqueNames)", Filter: "(&(objectClass=groupOfUniqueNames)(uniqueMember=*))"},
},
}
var PwdPropertiesFlags = map[uint32]string{
0x00000001: "PASSWORD_COMPLEX",
0x00000002: "PASSWORD_NO_ANON_CHANGE",
0x00000004: "PASSWORD_NO_CLEAR_CHANGE",
0x00000008: "LOCKOUT_ADMINS",
0x00000010: "PASSWORD_STORE_CLEARTEXT",
0x00000020: "REFUSE_PASSWORD_CHANGE",
}
Reference: https://learn.microsoft.com/en-us/windows/win32/adschema/a-pwdproperties
var RidMap = map[int]string{
500: "Administrator",
501: "Guest",
502: "KRBTGT (Key Distribution Center Service Account)",
512: "Domain Admins",
513: "Domain Users",
514: "Domain Guests",
515: "Domain Computers",
516: "Domain Controllers",
517: "Cert Publishers",
518: "Schema Admins",
519: "Enterprise Admins",
520: "Group Policy Creator Owners",
526: "Key Admins",
527: "Enterprise Key Admins",
553: "RAS and IAS Servers",
554: "Trusted for Delegation Computers",
555: "Protected Users",
572: "Cloneable Domain Controllers",
573: "Read-only Domain Controllers",
590: "Backup Operators",
591: "Print Operators",
592: "Server Operators",
593: "Account Operators",
594: "Replicator",
596: "Incoming Forest Trust Builders",
597: "Performance Monitor Users",
598: "Performance Log Users",
599: "Windows Authorization Access Group",
600: "Network Configuration Operators",
601: "Incoming Forest Trust Builders",
606: "Cryptographic Operators",
607: "Event Log Readers",
}
Relative ID (RID) descriptions
var SAMAccountTypeMap = map[int]string{
0x00000000: "Domain Object",
0x10000000: "Group Object",
0x10000001: "Non-Security Group Object",
0x30000000: "User Object",
0x30000001: "Machine Account",
0x20000000: "Alias Object",
0x20000001: "Non-Security Alias Object",
0x30000002: "Trust Account",
0x40000000: "App Basic Group",
0x40000001: "App Query Group",
}
sAMAccountType descriptions
var SDControlFlags = map[int]string{ SE_DACL_AUTO_INHERIT_REQ: "SE_DACL_AUTO_INHERIT_REQ", SE_DACL_AUTO_INHERITED: "SE_DACL_AUTO_INHERITED", SE_DACL_SACL_DEFAULTED: "SE_DACL_SACL_DEFAULTED", SE_DACL_PRESENT: "SE_DACL_PRESENT", SE_DACL_PROTECTED: "SE_DACL_PROTECTED", SE_GROUP_DEFAULTED: "SE_GROUP_DEFAULTED", SE_OWNER_DEFAULTED: "SE_OWNER_DEFAULTED", SE_RM_CONTROL_VALID: "SE_RM_CONTROL_VALID", SE_SACL_AUTO_INHERIT_REQ: "SE_SACL_AUTO_INHERIT_REQ", SE_SACL_AUTO_INHERITED: "SE_SACL_AUTO_INHERITED", SE_SACL_PRESENT: "SE_SACL_PRESENT", SE_SACL_PROTECTED: "SE_SACL_PROTECTED", SE_SELF_RELATIVE: "SE_SELF_RELATIVE", }
var SearchFlagsMap = map[uint32]string{
0x00000001: "fATTINDEX",
0x00000002: "fPDNTATTINDEX",
0x00000004: "fANR",
0x00000008: "fPRESERVEONDELETE",
0x00000010: "fCOPY",
0x00000020: "fTUPLEINDEX",
0x00000040: "fSUBTREEATTINDEX",
0x00000080: "fCONFIDENTIAL",
0x00000100: "fNEVERVALUEAUDIT",
0x00000200: "fRODCFilteredAttribute",
0x00000400: "fEXTENDEDLINKTRACKING",
0x00000800: "fBASEONLY",
0x00001000: "fPARTITIONSECRET",
}
var SystemFlags = map[uint32]string{
0x00000001: "FLAG_ATTR_NOT_REPLICATED",
0x00000002: "FLAG_ATTR_REQ_PARTIAL_SET_MEMBER",
0x00000004: "FLAG_ATTR_IS_CONSTRUCTED",
0x00000008: "FLAG_ATTR_IS_OPERATIONAL",
0x00000010: "FLAG_SCHEMA_BASE_OBJECT",
0x00000020: "FLAG_ATTR_IS_RDN",
0x02000000: "FLAG_DISALLOW_MOVE_ON_DELETE",
0x04000000: "FLAG_DOMAIN_DISALLOW_MOVE",
0x08000000: "FLAG_DOMAIN_DISALLOW_RENAME",
0x10000000: "FLAG_CONFIG_ALLOW_LIMITED_MOVE",
0x20000000: "FLAG_CONFIG_ALLOW_MOVE",
0x40000000: "FLAG_CONFIG_ALLOW_RENAME",
0x80000000: "FLAG_DISALLOW_DELETE",
}
var TrustAttributeFlags = map[uint32]string{
0x00000001: "NON_TRANSITIVE",
0x00000002: "UPLEVEL_ONLY",
0x00000004: "QUARANTINED_DOMAIN",
0x00000008: "FOREST_TRANSITIVE",
0x00000010: "CROSS_ORGANIZATION",
0x00000020: "WITHIN_FOREST",
0x00000040: "TREAT_AS_EXTERNAL",
0x00000080: "USES_RC4_ENCRYPTION",
0x00000200: "CROSS_ORGANIZATION_NO_TGT_DELEGATION",
0x00000400: "PIM_TRUST",
0x00000800: "CROSS_ORGANIZATION_ENABLE_TGT_DELEGATION",
}
var UacFlags = map[int]flagDesc{ UAC_SCRIPT: {"Script", ""}, UAC_ACCOUNTDISABLE: {"Disabled", "Enabled"}, UAC_HOMEDIR_REQUIRED: {"HomeDirRequired", ""}, UAC_LOCKOUT: {"LockedOut", ""}, UAC_PASSWD_NOTREQD: {"PwdNotRequired", ""}, UAC_PASSWD_CANT_CHANGE: {"CannotChangePwd", ""}, UAC_ENCRYPTED_TEXT_PWD_ALLOWED: {"EncryptedTextPwdAllowed", ""}, UAC_TEMP_DUPLICATE_ACCOUNT: {"TmpDuplicateAccount", ""}, UAC_NORMAL_ACCOUNT: {"NormalAccount", ""}, UAC_INTERDOMAIN_TRUST_ACCOUNT: {"InterdomainTrustAccount", ""}, UAC_WORKSTATION_TRUST_ACCOUNT: {"WorkstationTrustAccount", ""}, UAC_SERVER_TRUST_ACCOUNT: {"ServerTrustAccount", ""}, UAC_DONT_EXPIRE_PASSWORD: {"DoNotExpirePwd", ""}, UAC_MNS_LOGON_ACCOUNT: {"MNSLogonAccount", ""}, UAC_SMARTCARD_REQUIRED: {"SmartcardRequired", ""}, UAC_TRUSTED_FOR_DELEGATION: {"TrustedForDelegation", ""}, UAC_NOT_DELEGATED: {"NotDelegated", ""}, UAC_USE_DES_KEY_ONLY: {"UseDESKeyOnly", ""}, UAC_DONT_REQ_PREAUTH: {"DoNotRequirePreauth", ""}, UAC_PASSWORD_EXPIRED: {"PwdExpired", "PwdNotExpired"}, UAC_TRUSTED_TO_AUTH_FOR_DELEGATION: {"TrustedToAuthForDelegation", ""}, UAC_PARTIAL_SECRETS_ACCOUNT: {"PartialSecretsAccount", ""}, }
var WellKnownSIDsMap = map[string]string{
"S-1-0-0": "Null SID",
"S-1-1-0": "Everyone",
"S-1-2-0": "Local",
"S-1-2-1": "Console Logon",
"S-1-3-0": "Creator Owner ID",
"S-1-3-1": "Creator Group ID",
"S-1-3-2": "Creator Owner Server",
"S-1-3-3": "Creator Group Server",
"S-1-3-4": "Owner Rights",
"S-1-4": "Non-Unique Authority",
"S-1-5": "NT Authority",
"S-1-5-80-0": "All Services",
"S-1-5-1": "Dialup",
"S-1-5-113": "Local Account",
"S-1-5-114": "Local account and member of Administrators group",
"S-1-5-2": "Network",
"S-1-5-3": "Batch",
"S-1-5-4": "Interactive",
"S-1-5-6": "Serivce",
"S-1-5-7": "Anonymous Logon",
"S-1-5-8": "Proxy",
"S-1-5-9": "Enterprise Domain Controllers",
"S-1-5-10": "Self",
"S-1-5-11": "Authenticated Users",
"S-1-5-12": "Restricted Code",
"S-1-5-13": "Terminal Server User",
"S-1-5-14": "Remote Interactive Logon",
"S-1-5-15": "This Organization",
"S-1-5-17": "IUSR",
"S-1-5-18": "SYSTEM",
"S-1-5-19": "NT Authority (LocalService)",
"S-1-5-20": "Network Service",
}
Functions ¶
func AddEntriesToRequest ¶ added in v2.10.2
func AddEntriesToRequest(req *ldap.AddRequest, entries AttrEntries)
func Capitalize ¶
func ConvertGUID ¶
func ConvertSID ¶
func EncodeGUID ¶
func EndianConvert ¶
func FormatDuration ¶ added in v2.10.9
func FormatLDAPTime ¶
func FormatLDAPTime2 ¶ added in v2.10.7
func GuessQueryFilter ¶ added in v2.10.5
func GuessQueryFilter(identifier string, flavor LDAPFlavor) string
func HexToDecimalString ¶
func HexToOffset ¶
func HexToUint32 ¶ added in v2.10.9
func IndexOf ¶
func IndexOf[T comparable](collection []T, el T) int
func LoadClientCertPEM ¶ added in v2.12.0
func LoadClientCertPEM(certFile, keyFile string) (*x509.Certificate, any, error)
LoadClientCertPEM loads a client certificate/private key pair from PEM files, returning the parsed *x509.Certificate and private key adauth.Credential expects (ClientCert/ClientCertKey).
func LoadClientCertPFX ¶ added in v2.12.0
func LoadClientCertPFX(pfxFile string) (*x509.Certificate, any, error)
LoadClientCertPFX loads a client certificate/private key pair from a PFX file (empty password, matching godap's pre-migration behavior), via adauth's own PFX decoder.
func ParseSystemFlags ¶ added in v2.10.9
func ParseUACFlags ¶ added in v2.10.9
func ResolveDCServer ¶ added in v2.12.0
ResolveDCServer discovers a domain controller address for domain via a Kerberos SRV lookup (reusing adauth.Credential.DC(), the same resolution adauth itself uses for -dc-less invocations elsewhere). Used only when godap's target argument is omitted on the command line - an explicit server always takes precedence and never triggers this lookup.
Types ¶
type AttrEntries ¶ added in v2.10.2
Basic templates for object creation
func GetComputerTemplate ¶ added in v2.10.2
func GetComputerTemplate(objectName string) AttrEntries
func GetContainerTemplate ¶ added in v2.10.2
func GetContainerTemplate(objectName string) AttrEntries
func GetGroupTemplate ¶ added in v2.10.2
func GetGroupTemplate(objectName string) AttrEntries
func GetOUTemplate ¶ added in v2.10.2
func GetOUTemplate(objectName string) AttrEntries
func GetUserTemplate ¶ added in v2.10.2
func GetUserTemplate(objectName string, rootFQDN string) AttrEntries
type ConnectParams ¶ added in v2.12.0
type ConnectParams struct {
Server string
Port int
Scheme string // "ldap" or "ldaps"
Insecure bool // skip TLS certificate verification
Timeout time.Duration
PagingSize uint32
RootDN string
// KdcHost overrides which address the Kerberos config points the KDC at,
// when it differs from Server (godap's --kdc). Empty uses Server.
KdcHost string
// Dialer is used for both the LDAP TCP dial and Kerberos KDC traffic
// (e.g. a SOCKS5 dialer from adauth.DialerWithSOCKS5ProxyIfSet). Nil
// dials directly.
Dialer adauth.Dialer
// Resolver overrides DNS resolution (custom server / forced TCP / SOCKS
// proxied). Nil uses net.DefaultResolver.
Resolver adauth.Resolver
}
ConnectParams bundles the connection-level settings shared by every bind mode (as opposed to the credential-specific parameters each mode's own function takes).
type ControlMicrosoftSDFlags ¶
func (*ControlMicrosoftSDFlags) Encode ¶
func (c *ControlMicrosoftSDFlags) Encode() *ber.Packet
func (*ControlMicrosoftSDFlags) GetControlType ¶
func (c *ControlMicrosoftSDFlags) GetControlType() string
func (*ControlMicrosoftSDFlags) String ¶
func (c *ControlMicrosoftSDFlags) String() string
type FormattedAttr ¶ added in v2.10.9
type FormattedAttr struct {
Values []FormattedAttrValue
}
func FormatLDAPAttribute ¶
func FormatLDAPAttribute(attr *ldap.EntryAttribute, timeFormat string, timeOffset int) FormattedAttr
func (FormattedAttr) ValuesStr ¶ added in v2.10.9
func (e FormattedAttr) ValuesStr() string
type FormattedAttrValue ¶ added in v2.10.9
type LDAPConn ¶
type LDAPConn struct {
Conn *ldap.Conn
PagingSize uint32
DefaultRootDN string
Flavor LDAPFlavor
}
Basic LDAP connection type
func ExternalBind ¶ added in v2.12.0
func ExternalBind(ctx context.Context, p ConnectParams, cert *x509.Certificate, key any) (*LDAPConn, error)
ExternalBind performs a TLS client-certificate bind (SASL EXTERNAL over StartTLS, or a WhoAmI-verified bind over LDAPS) - godap's pre-migration PEM/PFX modes, both now funneled through this one function since ldapauth dispatches on scheme internally. cert/key are loaded by the caller via LoadClientCertPEM/LoadClientCertPFX below.
func KerbBindWithAESKey ¶ added in v2.12.0
func KerbBindWithAESKey(ctx context.Context, p ConnectParams, domain, username, aesKeyHex string) (*LDAPConn, error)
KerbBindWithAESKey performs a Kerberos bind by obtaining a TGT using a raw Kerberos AES128/AES256 key (hex-encoded) - new, no prior equivalent.
func KerbBindWithCCache ¶ added in v2.12.0
func KerbBindWithCCache(ctx context.Context, p ConnectParams, ccachePath, domain, username string) (*LDAPConn, error)
KerbBindWithCCache performs a Kerberos bind using an existing ccache file (no AS-REQ). The SPN is derived automatically by ldapauth from the target (godap's prior --spn flag is removed - see the design doc). username/domain are optional (the ticket itself comes from the ccache either way) but threaded through for consistency with the other Kerberos modes.
func KerbBindWithNTHash ¶ added in v2.12.0
func KerbBindWithNTHash(ctx context.Context, p ConnectParams, domain, username, ntHash string) (*LDAPConn, error)
KerbBindWithNTHash performs a Kerberos bind by obtaining a TGT using an NT hash in place of a password - new, no prior equivalent in godap.
func KerbBindWithPKINIT ¶ added in v2.12.0
func KerbBindWithPKINIT( ctx context.Context, p ConnectParams, domain, username string, cert *x509.Certificate, key any, ) (*LDAPConn, error)
KerbBindWithPKINIT performs a Kerberos bind by obtaining a TGT via PKINIT (client certificate). Distinct from ExternalBind: this authenticates via Kerberos using the certificate, not via a raw TLS/SASL EXTERNAL bind - new, no prior equivalent (godap's --crt/--key/--pfx flags only ever did ExternalBind before this migration).
func KerbBindWithPassword ¶ added in v2.12.0
func KerbBindWithPassword(ctx context.Context, p ConnectParams, domain, username, password string) (*LDAPConn, error)
KerbBindWithPassword performs a Kerberos bind by first obtaining a TGT via AS-REQ with a cleartext password - a mode godap did not have prior to this migration (Kerberos support was ccache-only).
func LDAPBind ¶ added in v2.12.0
LDAPBind performs a simple LDAP bind, or an unauthenticated bind when password is empty (matches godap's pre-migration behavior, which never distinguished "-p omitted" from "-p ”"). identity is used verbatim - it may be a full bind DN, a UPN (user@domain), or a bare username; it is intentionally NOT split into Credential.Username/Domain, since Credential.UPN() reproduces Username unchanged when Domain is empty, preserving godap's existing support for raw bind DNs.
func NTLMBindWithHash ¶ added in v2.12.0
func NTLMBindWithHash(ctx context.Context, p ConnectParams, domain, username, ntHash string) (*LDAPConn, error)
NTLMBindWithHash performs an NTLM bind using an NT hash (pass-the-hash). Gains TLS channel binding automatically via ldapauth when the connection is over TLS.
func NTLMBindWithPassword ¶ added in v2.12.0
func NTLMBindWithPassword(ctx context.Context, p ConnectParams, domain, username, password string) (*LDAPConn, error)
NTLMBindWithPassword performs an NTLM bind using a cleartext password - the new default path for a bare password (see the CLI resolution design).
func (*LDAPConn) AddADIDNSNode ¶
func (*LDAPConn) AddADIDNSRecords ¶ added in v2.7.4
func (*LDAPConn) AddADIDNSZone ¶
func (*LDAPConn) AddAttribute ¶
func (lc *LDAPConn) AddAttribute(targetDN string, attributeToAdd string, attributeValues []string) error
Attributes
func (*LDAPConn) AddComputer ¶
func (*LDAPConn) AddContainer ¶
func (*LDAPConn) AddMemberToGroup ¶
func (*LDAPConn) AddOrganizationalUnit ¶
func (*LDAPConn) DeleteAttribute ¶
func (*LDAPConn) DeleteAttributeValues ¶ added in v2.8.0
func (*LDAPConn) FindFirstAttr ¶
func (*LDAPConn) FindNamingContexts ¶
func (*LDAPConn) FindPrimaryGroupForSID ¶
func (*LDAPConn) FindRootDN ¶
func (*LDAPConn) FindRootFQDN ¶
func (*LDAPConn) FindSIDForObject ¶
func (*LDAPConn) FindSamForSID ¶
func (*LDAPConn) FindSchemaClassesAndAttributes ¶
func (*LDAPConn) FindSchemaControlAccessRights ¶
func (*LDAPConn) GetADIDNSNode ¶
func (*LDAPConn) GetADIDNSNodes ¶
func (*LDAPConn) GetADIDNSZones ¶
func (*LDAPConn) GetSecurityDescriptor ¶
func (*LDAPConn) GuessFlavor ¶ added in v2.10.5
func (lc *LDAPConn) GuessFlavor()
func (*LDAPConn) ModifyAttribute ¶
func (*LDAPConn) MoveObject ¶
func (*LDAPConn) Query ¶
func (lc *LDAPConn) Query(baseDN string, searchFilter string, scope int, showDeleted bool) ([]*ldap.Entry, error)
Search
func (*LDAPConn) QueryFirst ¶ added in v2.9.0
func (*LDAPConn) QueryGroupMembers ¶
func (*LDAPConn) QueryGroupMembersBasic ¶ added in v2.10.5
func (*LDAPConn) QueryGroupMembersDeep ¶ added in v2.9.0
func (*LDAPConn) QueryObjectGroups ¶ added in v2.9.0
func (*LDAPConn) QueryObjectGroupsBasic ¶ added in v2.10.5
func (*LDAPConn) QueryObjectGroupsDeep ¶ added in v2.9.0
func (*LDAPConn) QueryWithAttrs ¶ added in v2.11.0
func (*LDAPConn) RemoveMemberFromGroup ¶ added in v2.8.0
func (*LDAPConn) ReplaceADIDNSRecords ¶ added in v2.7.4
func (*LDAPConn) ResetPassword ¶
type LDAPFlavor ¶ added in v2.10.5
type LDAPFlavor int
LDAP Flavors
const ( MicrosoftADFlavor LDAPFlavor = iota BasicLDAPFlavor )