Como obter o openldap para honrar pwdReset = TRUE

2

Temos um aplicativo personalizado que usa o openldap (2.4.32) como um banco de dados do usuário. Por exigência do cliente, estou modificando-o para usar a sobreposição de ppolicy do openldap. O requisito é forçar o usuário a alterar sua senha quando criada pela primeira vez ou após a redefinição da senha de administrador. Depois de ativar e configurar a sobreposição e sua política padrão, vejo os novos campos ocultos serem adicionados aos meus objetos para controlar a expiração da senha, mas parece que não consigo fazer com que pwdMustChange e pwdReset funcionem.

Aqui está minha configuração de sobreposição:

MBP2:~ me$ ldapsearch -h 10.242.25.158 -D "cn=root,cn=config" -x -W -b "cn=config" -s  sub "olcOverlay=ppolicy"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: olcOverlay=ppolicy
# requesting: ALL
#

# {1}ppolicy, {1}bdb, config
dn: olcOverlay={1}ppolicy,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: {1}ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=my,dc=domain,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

E o objeto padrão pwdPolicy:

MBP2:~ me$ ldapsearch -h 10.242.25.158 -D "cn=ldapadmin,dc=my,dc=domain,dc=com" -x -W -b "ou=policies,dc=my,dc=domain,dc=com" -s sub "cn=default"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <ou=policies,dc=my,dc=domain,dc=com> with scope subtree
# filter: cn=default
# requesting: ALL
#

# default, policies, my.domain.com
dn: cn=default,ou=policies,dc=my,dc=domain,dc=com
objectClass: person
objectClass: top
objectClass: pwdPolicy
cn: default
pwdAllowUserChange: TRUE
pwdAttribute: 2.5.4.35
pwdCheckQuality: 2
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 5
pwdMustChange: TRUE
pwdSafeModify: TRUE
sn: dummy value

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

E um usuário criado depois de adicionar o módulo ppolicy. Depois de algum googling, eu configurei manualmente o pwdReset: TRUE para tentar forçar a senha a expirar.

MBP2:~ cwikj$ ldapsearch -h 10.242.25.158 -D "cn=ldapadmin,dc=my,dc=domain,dc=com" -x -W -b "dc=my,dc=domain,dc=com" -s sub "uid=cs_j0000000002" +
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=my,dc=domain,dc=com> with scope subtree
# filter: uid=cs_j0000000002
# requesting: + 
#

# CS_J0000000002, identities, A63562018398.my.domain.com
dn: uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
structuralObjectClass: customIdentity
entryUUID: 2569c9a5-ba99-4275-85b4-50974e57c2ee
creatorsName: cn=ldapadmin,dc=my,dc=domain,dc=com
createTimestamp: 20121004201108Z
pwdChangedTime: 20121004201108Z
pwdReset: TRUE
entryCSN: 20121004211150.015110Z#000000#000#000000
modifiersName: cn=ldapadmin,dc=my,dc=domain,dc=com
modifyTimestamp: 20121004211150Z
entryDN: uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Depois de tudo isso, tento ligar, mas não recebo uma mensagem de expiração de senha.

MBP2:~ me$ ldapwhoami -h 10.242.25.158 -v -x -W -D "uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com"
ldap_initialize( ldap://10.242.25.158 )
Enter LDAP Password:
dn:uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
Result: Success (0)

Como posso obter a senha para expirar? Existe algo na política padrão que está em conflito com pwdReset: TRUE?

    
por Bill Brasky 04.10.2012 / 23:53

1 resposta

1

Para ver informações adicionais de ppolicy , você precisa solicitar a extensão explicitamente.

Para ldapsearch(1) , ldapwhoami(1) e amigos, você faz isso com -e ppolicy :

$ ldapwhoami -x -D uid=me,ou=users,dc=example,dc=org -W -e ppolicy -v
ldap_initialize( <DEFAULT> )
Enter LDAP Password: 
ldap_bind: Success (0); Password must be changed
dn:uid=me,ou=users,dc=example,dc=org
Result: Success (0)

Para o seu aplicativo, isso depende da biblioteca específica que você está usando. O código para o C api, por exemplo, é aqui . (Eu não achei manpage para isso, desculpe.)

    
por 08.03.2013 / 20:04

Tags