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.dns.store.jndi.operations;
21
22
23 import java.util.HashSet;
24 import java.util.Set;
25
26 import javax.naming.Name;
27 import javax.naming.NamingEnumeration;
28 import javax.naming.NamingException;
29 import javax.naming.directory.Attribute;
30 import javax.naming.directory.Attributes;
31 import javax.naming.directory.BasicAttribute;
32 import javax.naming.directory.BasicAttributes;
33 import javax.naming.directory.DirContext;
34 import javax.naming.directory.SearchResult;
35
36 import org.apache.directory.server.dns.messages.QuestionRecord;
37 import org.apache.directory.server.dns.messages.RecordClass;
38 import org.apache.directory.server.dns.messages.RecordType;
39 import org.apache.directory.server.dns.messages.ResourceRecord;
40 import org.apache.directory.server.dns.messages.ResourceRecordModifier;
41 import org.apache.directory.server.dns.store.DnsAttribute;
42 import org.apache.directory.server.dns.store.jndi.DnsOperation;
43
44
45
46
47
48
49
50 public class GetFlatRecord implements DnsOperation
51 {
52
53 private final QuestionRecord question;
54
55
56
57
58
59
60
61 public GetFlatRecord( QuestionRecord question )
62 {
63 this.question = question;
64 }
65
66
67
68
69
70
71 public Set<ResourceRecord> execute( DirContext ctx, Name base ) throws Exception
72 {
73 if ( question == null )
74 {
75 return null;
76 }
77
78 Attributes matchAttrs = new BasicAttributes( true );
79
80 matchAttrs.put( new BasicAttribute( DnsAttribute.NAME, question.getDomainName() ) );
81 matchAttrs.put( new BasicAttribute( DnsAttribute.TYPE, question.getRecordType().name() ) );
82 matchAttrs.put( new BasicAttribute( DnsAttribute.CLASS, question.getRecordClass().name() ) );
83
84 Set<ResourceRecord> record = new HashSet<>();
85
86 NamingEnumeration<SearchResult> answer = ctx.search( base, matchAttrs );
87
88 if ( answer.hasMore() )
89 {
90 SearchResult result = answer.next();
91
92 Attributes attrs = result.getAttributes();
93
94 if ( attrs == null )
95 {
96 return null;
97 }
98
99 record.add( getRecord( attrs ) );
100 }
101
102 return record;
103 }
104
105
106
107
108
109
110
111
112
113 private ResourceRecord getRecord( Attributes attrs ) throws NamingException
114 {
115 ResourceRecordModifierssages/ResourceRecordModifier.html#ResourceRecordModifier">ResourceRecordModifier modifier = new ResourceRecordModifier();
116
117 String dnsName = getAttrOrNull( attrs, DnsAttribute.NAME );
118 String dnsType = getAttrOrNull( attrs, DnsAttribute.TYPE );
119 String dnsClass = getAttrOrNull( attrs, DnsAttribute.CLASS );
120 String dnsTtl = getAttrOrNull( attrs, DnsAttribute.TTL );
121
122 modifier.setDnsName( dnsName );
123 modifier.setDnsType( RecordType.valueOf( dnsType ) );
124 modifier.setDnsClass( RecordClass.valueOf( dnsClass ) );
125 modifier.setDnsTtl( Integer.parseInt( dnsTtl ) );
126
127 NamingEnumeration<String> ids = attrs.getIDs();
128
129 while ( ids.hasMore() )
130 {
131 String id = ids.next();
132 modifier.put( id, ( String ) attrs.get( id ).get() );
133 }
134
135 return modifier.getEntry();
136 }
137
138
139 private String getAttrOrNull( Attributes attrs, String name ) throws NamingException
140 {
141 Attribute attr = attrs.get( name );
142 return attr != null ? ( String ) attr.get() : null;
143 }
144 }