1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.kerberos.shared.store.operations;
21
22
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import javax.naming.directory.DirContext;
27 import javax.security.auth.kerberos.KerberosPrincipal;
28
29 import org.apache.directory.server.core.CoreSession;
30 import org.apache.directory.server.core.entry.DefaultServerAttribute;
31 import org.apache.directory.server.core.entry.ServerAttribute;
32 import org.apache.directory.server.core.entry.ServerEntry;
33 import org.apache.directory.server.core.entry.ServerModification;
34 import org.apache.directory.server.protocol.shared.store.DirectoryServiceOperation;
35 import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
36 import org.apache.directory.shared.ldap.constants.SchemaConstants;
37 import org.apache.directory.shared.ldap.entry.Modification;
38 import org.apache.directory.shared.ldap.entry.ModificationOperation;
39 import org.apache.directory.shared.ldap.name.LdapDN;
40
41
42
43
44
45
46
47
48 public class ChangePassword implements DirectoryServiceOperation
49 {
50 private static final long serialVersionUID = -7147685183641418353L;
51
52
53 protected KerberosPrincipal principal;
54
55 protected String newPassword;
56
57
58
59
60
61
62
63
64 public ChangePassword( KerberosPrincipal principal, String newPassword )
65 {
66 this.principal = principal;
67 this.newPassword = newPassword;
68 }
69
70
71 public Object execute( CoreSession session, LdapDN searchBaseDn ) throws Exception
72 {
73 if ( principal == null )
74 {
75 return null;
76 }
77
78 AttributeTypeRegistry registry = session.getDirectoryService().getRegistries().getAttributeTypeRegistry();
79
80 List<Modification> mods = new ArrayList<Modification>(2);
81
82 ServerAttribute newPasswordAttribute = new DefaultServerAttribute(
83 registry.lookup( SchemaConstants.USER_PASSWORD_AT_OID ), newPassword );
84 mods.set( 0, new ServerModification( ModificationOperation.REPLACE_ATTRIBUTE, newPasswordAttribute ) );
85
86 ServerAttribute principalAttribute = new DefaultServerAttribute(
87 registry.lookup( "krb5PrincipalName" ), principal.getName() );
88 mods.set( 1, new ServerModification( ModificationOperation.REPLACE_ATTRIBUTE, principalAttribute ) );
89
90
91 ServerEntry entry = StoreUtils.findPrincipalEntry( session, searchBaseDn, principal.getName() );
92 session.modify( entry.getDn(), mods );
93
94 return entry.getDn();
95 }
96 }