1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.codec.actions.addRequest;
21
22
23 import org.apache.directory.api.asn1.DecoderException;
24 import org.apache.directory.api.asn1.ber.grammar.GrammarAction;
25 import org.apache.directory.api.asn1.ber.tlv.TLV;
26 import org.apache.directory.api.i18n.I18n;
27 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
28 import org.apache.directory.api.ldap.codec.api.ResponseCarryingException;
29 import org.apache.directory.api.ldap.codec.decorators.AddRequestDecorator;
30 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
31 import org.apache.directory.api.ldap.model.message.AddResponseImpl;
32 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
33 import org.apache.directory.api.ldap.model.name.Dn;
34 import org.apache.directory.api.util.Strings;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38
39
40
41
42
43
44
45
46
47
48 public class StoreAddRequestEntryName extends GrammarAction<LdapMessageContainer<AddRequestDecorator>>
49 {
50
51 private static final Logger LOG = LoggerFactory.getLogger( StoreAddRequestEntryName.class );
52
53
54
55
56
57 public StoreAddRequestEntryName()
58 {
59 super( "Store Add request entry Name" );
60 }
61
62
63
64
65
66 public void action( LdapMessageContainer<AddRequestDecorator> container ) throws DecoderException
67 {
68 AddRequestDecorator addRequest = container.getMessage();
69
70 TLV tlv = container.getCurrentTLV();
71
72
73 if ( tlv.getLength() == 0 )
74 {
75 String msg = I18n.err( I18n.ERR_04085 );
76 LOG.error( msg );
77
78 AddResponseImpl response = new AddResponseImpl( addRequest.getMessageId() );
79
80
81
82 throw new ResponseCarryingException( msg, response, ResultCodeEnum.NAMING_VIOLATION,
83 Dn.EMPTY_DN, null );
84 }
85 else
86 {
87 Dn entryDn = null;
88 byte[] dnBytes = tlv.getValue().getData();
89 String dnStr = Strings.utf8ToString( dnBytes );
90
91 try
92 {
93 entryDn = new Dn( dnStr );
94 }
95 catch ( LdapInvalidDnException ine )
96 {
97 String msg = "Invalid Dn given : " + dnStr + " (" + Strings.dumpBytes( dnBytes )
98 + ") is invalid";
99 LOG.error( "{} : {}", msg, ine.getMessage() );
100
101 AddResponseImpl response = new AddResponseImpl( addRequest.getMessageId() );
102 throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALID_DN_SYNTAX,
103 Dn.EMPTY_DN, ine );
104 }
105
106 addRequest.setEntryDn( entryDn );
107 }
108
109 LOG.debug( "Adding an entry with Dn : {}", addRequest.getEntry() );
110 }
111 }