ldaputils

package
v2.12.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
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

View Source
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

View Source
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":             "🏢",
}
View Source
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

View Source
var InstanceTypeMap = map[int]string{
	1:  "NamingContextHead",
	2:  "NotInstantiatedReplica",
	4:  "WritableObject",
	8:  "ParentNamingContextHeld",
	16: "FirstNamingContextConstruction",
	32: "NamingContextRemovalFromDSA",
}

instanceType descriptions

View Source
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)"},
	},
}
View Source
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=*))"},
	},
}
View Source
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

View Source
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

View Source
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

View Source
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",
}
View Source
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",
}

Reference: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a

View Source
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",
}

Reference: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/1e38247d-8234-4273-9de3-bbf313548631

View Source
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",
}

Reference: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a

View Source
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", ""},
}
View Source
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 Capitalize(str string) string

func CnUidOrDN added in v2.10.5

func CnUidOrDN(object string) (string, bool)

func ConvertGUID

func ConvertGUID(portion string) string

func ConvertSID

func ConvertSID(hexSID string) (SID string)

func EncodeGUID

func EncodeGUID(guid string) (string, error)

func EncodeSID

func EncodeSID(sid string) (string, error)

func EndianConvert

func EndianConvert(sd string) (newSD string)

func FormatDuration added in v2.10.9

func FormatDuration(d time.Duration) string

func FormatLDAPTime

func FormatLDAPTime(val, format string, offset int) string

func FormatLDAPTime2 added in v2.10.7

func FormatLDAPTime2(val, format string, offset int) string

func GuessQueryFilter added in v2.10.5

func GuessQueryFilter(identifier string, flavor LDAPFlavor) string

func HexToDecimalString

func HexToDecimalString(hex string) (decimal string)

func HexToInt

func HexToInt(hex string) (integer int)

func HexToOffset

func HexToOffset(hex string) (integer int64)

func HexToUint32 added in v2.10.9

func HexToUint32(hex string) uint32

func IndexOf

func IndexOf[T comparable](collection []T, el T) int

func IsSID

func IsSID(s string) bool

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 ParseMSDuration added in v2.10.9

func ParseMSDuration(val string) (time.Duration, error)

func ParseSystemFlags added in v2.10.9

func ParseSystemFlags(v uint32) []string

func ParseUACFlags added in v2.10.9

func ParseUACFlags(uacInt int) []string

func ResolveDCServer added in v2.12.0

func ResolveDCServer(ctx context.Context, domain string, resolver adauth.Resolver) (string, error)

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.

func SamOrDN

func SamOrDN(object string) (string, bool)

Types

type AttrEntries added in v2.10.2

type AttrEntries map[string][]string

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

type ControlMicrosoftSDFlags struct {
	Criticality  bool
	ControlValue int32
}

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 FormattedAttrValue struct {
	OriginalValue  string
	FormattedValue string
}

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

func LDAPBind(ctx context.Context, p ConnectParams, identity, password string) (*LDAPConn, error)

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 (lc *LDAPConn) AddADIDNSNode(nodeName string, zoneDN string, records []adidns.DNSRecord) (string, error)

func (*LDAPConn) AddADIDNSRecords added in v2.7.4

func (lc *LDAPConn) AddADIDNSRecords(nodeDN string, records []adidns.DNSRecord) error

func (*LDAPConn) AddADIDNSZone

func (lc *LDAPConn) AddADIDNSZone(objectName string, props []adidns.DNSProperty, isForest bool) (string, error)

func (*LDAPConn) AddAttribute

func (lc *LDAPConn) AddAttribute(targetDN string, attributeToAdd string, attributeValues []string) error

Attributes

func (*LDAPConn) AddComputer

func (lc *LDAPConn) AddComputer(objectName string, parentDN string, dynamicTTL int) error

func (*LDAPConn) AddContainer

func (lc *LDAPConn) AddContainer(objectName string, parentDN string, dynamicTTL int) error

func (*LDAPConn) AddGroup

func (lc *LDAPConn) AddGroup(objectName string, parentDN string, dynamicTTL int) error

func (*LDAPConn) AddMemberToGroup

func (lc *LDAPConn) AddMemberToGroup(memberDN string, groupDN string) error

func (*LDAPConn) AddOrganizationalUnit

func (lc *LDAPConn) AddOrganizationalUnit(objectName string, parentDN string, dynamicTTL int) error

func (*LDAPConn) AddUser

func (lc *LDAPConn) AddUser(objectName string, parentDN string, dynamicTTL int) error

func (*LDAPConn) DeleteAttribute

func (lc *LDAPConn) DeleteAttribute(targetDN string, attributeToDelete string) error

func (*LDAPConn) DeleteAttributeValues added in v2.8.0

func (lc *LDAPConn) DeleteAttributeValues(targetDN string, targetAttribute string, valuesToDelete []string) error

func (*LDAPConn) DeleteObject

func (lc *LDAPConn) DeleteObject(targetDN string) error

Objects

func (*LDAPConn) FindFirst added in v2.9.0

func (lc *LDAPConn) FindFirst(identifier string) (*ldap.Entry, error)

func (*LDAPConn) FindFirstAttr

func (lc *LDAPConn) FindFirstAttr(filter string, attr string) (string, error)

func (*LDAPConn) FindNamingContexts

func (lc *LDAPConn) FindNamingContexts() ([]string, error)

func (*LDAPConn) FindPrimaryGroupForSID

func (lc *LDAPConn) FindPrimaryGroupForSID(SID string) (groupSID string, err error)

func (*LDAPConn) FindRootDN

func (lc *LDAPConn) FindRootDN() (string, error)

func (*LDAPConn) FindRootFQDN

func (lc *LDAPConn) FindRootFQDN() (string, error)

func (*LDAPConn) FindSIDForObject

func (lc *LDAPConn) FindSIDForObject(object string) (SID string, err error)

func (*LDAPConn) FindSamForSID

func (lc *LDAPConn) FindSamForSID(SID string) (resolvedSID string, err error)

func (*LDAPConn) FindSchemaClassesAndAttributes

func (lc *LDAPConn) FindSchemaClassesAndAttributes() (map[string]string, map[string]string, error)

func (*LDAPConn) FindSchemaControlAccessRights

func (lc *LDAPConn) FindSchemaControlAccessRights(filter string) (map[string]string, error)

func (*LDAPConn) GetADIDNSNode

func (lc *LDAPConn) GetADIDNSNode(nodeDN string) (adidns.DNSNode, error)

func (*LDAPConn) GetADIDNSNodes

func (lc *LDAPConn) GetADIDNSNodes(zoneDN string) ([]adidns.DNSNode, error)

func (*LDAPConn) GetADIDNSZones

func (lc *LDAPConn) GetADIDNSZones(name string, isForest bool) ([]adidns.DNSZone, error)

func (*LDAPConn) GetSecurityDescriptor

func (lc *LDAPConn) GetSecurityDescriptor(object string, showDeleted bool) (queryResult string, err error)

func (*LDAPConn) GuessFlavor added in v2.10.5

func (lc *LDAPConn) GuessFlavor()

func (*LDAPConn) ModifyAttribute

func (lc *LDAPConn) ModifyAttribute(targetDN string, attributeToModify string, attributeValues []string) error

func (*LDAPConn) ModifyDACL

func (lc *LDAPConn) ModifyDACL(objectName string, newSD string) error

func (*LDAPConn) MoveObject

func (lc *LDAPConn) MoveObject(sourceDN string, targetDN string) error

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 (lc *LDAPConn) QueryFirst(filter string) (*ldap.Entry, error)

func (*LDAPConn) QueryGroupMembers

func (lc *LDAPConn) QueryGroupMembers(groupDN string) (group []*ldap.Entry, err error)

func (*LDAPConn) QueryGroupMembersBasic added in v2.10.5

func (lc *LDAPConn) QueryGroupMembersBasic(groupDN string) ([]string, error)

func (*LDAPConn) QueryGroupMembersDeep added in v2.9.0

func (lc *LDAPConn) QueryGroupMembersDeep(groupDN string, maxDepth int) (group []*ldap.Entry, err error)

func (*LDAPConn) QueryObjectGroups added in v2.9.0

func (lc *LDAPConn) QueryObjectGroups(memberDN string) ([]*ldap.Entry, error)

func (*LDAPConn) QueryObjectGroupsBasic added in v2.10.5

func (lc *LDAPConn) QueryObjectGroupsBasic(memberDN string) ([]*ldap.Entry, error)

func (*LDAPConn) QueryObjectGroupsDeep added in v2.9.0

func (lc *LDAPConn) QueryObjectGroupsDeep(objectDN string, maxDepth int) (group []*ldap.Entry, err error)

func (*LDAPConn) QueryWithAttrs added in v2.11.0

func (lc *LDAPConn) QueryWithAttrs(baseDN string, searchFilter string, scope int, showDeleted bool, attrs []string) ([]*ldap.Entry, error)

func (*LDAPConn) RemoveMemberFromGroup added in v2.8.0

func (lc *LDAPConn) RemoveMemberFromGroup(memberDN string, groupDN string) error

func (*LDAPConn) ReplaceADIDNSRecords added in v2.7.4

func (lc *LDAPConn) ReplaceADIDNSRecords(nodeDN string, records []adidns.DNSRecord) error

func (*LDAPConn) ResetPassword

func (lc *LDAPConn) ResetPassword(objectDN string, newPassword string) error

func (*LDAPConn) UpgradeToTLS

func (lc *LDAPConn) UpgradeToTLS(tlsConfig *tls.Config) error

UpgradeToTLS upgrades an already-established connection with StartTLS (bound to Ctrl+U in the TUI, independent of how the connection was authenticated - not part of the bind functions below).

type LDAPFlavor added in v2.10.5

type LDAPFlavor int

LDAP Flavors

const (
	MicrosoftADFlavor LDAPFlavor = iota
	BasicLDAPFlavor
)

type LibQuery

type LibQuery struct {
	Title  string
	Filter string
	BaseDN string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL