- config 重写:删 user-ou/inactive-ou/group-root-* / group-object-class / group-member-attr / initial-password;新增 lldap 写通道 + webhook + confirm-base-url + 两套 schedule + guard - ldaplib 收拢为只读:属性常量/DN 归入 attrs.go;删 ops.go 写路径与 internal/password - config.example.yml 重写成 LLDAP 形态 - 组命名修订(呼应 AGENTS.md 约束12):用部门稳定索引 cn=<dept_id> 做组身份, mirror_departments 增 group_id 列并跨快照保留,可读中文名只走 DB 展示
69 lines
2.6 KiB
Go
69 lines
2.6 KiB
Go
package ldaplib
|
|
|
|
// LDAP 属性名与 DN 构造等纯工具,集中在此,供读取与映射共用。
|
|
//
|
|
// 刻意不含任何写操作:本包定位为 LLDAP 的「读」原语,一切写入走 lldapgql。
|
|
// 保留这些常量是因为 diff/映射/预览仍在比对 LDAP 属性,去掉会让比对散落各处。
|
|
|
|
import (
|
|
"github.com/go-ldap/ldap/v3"
|
|
)
|
|
|
|
// 属性名常量。
|
|
const (
|
|
AttrObjectClass = "objectClass"
|
|
AttrUID = "uid"
|
|
AttrCN = "cn"
|
|
AttrSN = "sn"
|
|
AttrGivenName = "givenName"
|
|
AttrDisplayName = "displayName"
|
|
AttrMail = "mail"
|
|
AttrMobile = "mobile"
|
|
AttrEmployeeNumber = "employeeNumber"
|
|
AttrDepartmentNumber = "departmentNumber"
|
|
AttrPostalAddress = "postalAddress"
|
|
AttrBusinessCategory = "businessCategory"
|
|
AttrEmployeeType = "employeeType"
|
|
AttrDescription = "description"
|
|
AttrMember = "member"
|
|
AttrUniqueMember = "uniqueMember"
|
|
AttrUserPassword = "userPassword"
|
|
)
|
|
|
|
// memberAttrs 列出可能承载组成员关系的属性名。
|
|
// LLDAP 组对内同时响应 member 与 uniqueMember,读取两种都认,否则会漏掉成员。
|
|
var memberAttrs = []string{AttrMember, AttrUniqueMember}
|
|
|
|
// groupObjectClass 是 LLDAP 分组的 LDAP objectClass。
|
|
var groupObjectClass = "groupOfUniqueNames"
|
|
|
|
// userReadAttrs 是读取用户条目时需要取回的属性。
|
|
// 刻意不读 userPassword:同步永远不需要比对或改写密码。
|
|
var userReadAttrs = []string{
|
|
AttrUID, AttrCN, AttrSN, AttrGivenName, AttrDisplayName, AttrMail,
|
|
AttrMobile, AttrEmployeeNumber, AttrDepartmentNumber, AttrPostalAddress,
|
|
AttrBusinessCategory, AttrEmployeeType, AttrDescription,
|
|
}
|
|
|
|
// groupReadAttrs 读取分组时额外取回成员列表。
|
|
// 同时请求 member 与 uniqueMember 是安全的:缺省的属性不会报错,只是不返回。
|
|
var groupReadAttrs = []string{AttrCN, AttrDescription, AttrObjectClass, AttrMember, AttrUniqueMember}
|
|
|
|
// UserReadAttrs 返回读取用户条目所需的属性列表。
|
|
func UserReadAttrs() []string { return append([]string{}, userReadAttrs...) }
|
|
|
|
// EscapeDN 导出 DN 转义,供拼装 RDN 使用。
|
|
func EscapeDN(s string) string { return ldap.EscapeDN(s) }
|
|
|
|
// EscapeFilter 导出过滤器转义。
|
|
func EscapeFilter(s string) string { return ldap.EscapeFilter(s) }
|
|
|
|
// UserDN 按 uid 与用户 OU 拼接用户 DN。
|
|
func UserDN(uid, ouDN string) string {
|
|
return "uid=" + EscapeDN(uid) + "," + ouDN
|
|
}
|
|
|
|
// GroupDN 拼接部门组 DN(cn 已含拍平拼音链)。
|
|
func GroupDN(cn, parentDN string) string {
|
|
return "cn=" + EscapeDN(cn) + "," + parentDN
|
|
} |