summaryrefslogtreecommitdiff
path: root/java/src/IceSSL/RFC2253.java
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2009-08-03 15:34:00 -0700
committerMark Spruiell <mes@zeroc.com>2009-08-03 15:34:00 -0700
commite54654cf238a719e5ed7632defe397931beb569f (patch)
tree52ee683eed4232cb5e06c0f2013af2b13060edf2 /java/src/IceSSL/RFC2253.java
parent4171 - Global namespace pollution (diff)
downloadice-e54654cf238a719e5ed7632defe397931beb569f.tar.bz2
ice-e54654cf238a719e5ed7632defe397931beb569f.tar.xz
ice-e54654cf238a719e5ed7632defe397931beb569f.zip
bug 4087 - anti-trust rule in IceSSL
Diffstat (limited to 'java/src/IceSSL/RFC2253.java')
-rw-r--r--java/src/IceSSL/RFC2253.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/java/src/IceSSL/RFC2253.java b/java/src/IceSSL/RFC2253.java
index 13e701ba15d..50d65e17ef8 100644
--- a/java/src/IceSSL/RFC2253.java
+++ b/java/src/IceSSL/RFC2253.java
@@ -40,24 +40,40 @@ class RFC2253
String value;
}
+ static class RDNEntry
+ {
+ java.util.List<RDNPair> rdn = new java.util.LinkedList<RDNPair>();
+ boolean negate = false;
+ }
+
static private class ParseState
{
String data;
int pos;
}
- public static java.util.List<java.util.List<RDNPair> >
+ public static java.util.List<RDNEntry>
parse(String data)
throws ParseException
{
- java.util.List<java.util.List<RDNPair> > results = new java.util.LinkedList<java.util.List<RDNPair> >();
- java.util.List<RDNPair> current = new java.util.LinkedList<RDNPair>();
+ java.util.List<RDNEntry> results = new java.util.LinkedList<RDNEntry>();
+ RDNEntry current = new RDNEntry();
ParseState state = new ParseState();
state.data = data;
state.pos = 0;
while(state.pos < state.data.length())
{
- current.add(parseNameComponent(state));
+ eatWhite(state);
+ if(state.pos < state.data.length() && state.data.charAt(state.pos) == '!')
+ {
+ if(!current.rdn.isEmpty())
+ {
+ throw new ParseException("negation symbol '!' must appear at start of list");
+ }
+ ++state.pos;
+ current.negate = true;
+ }
+ current.rdn.add(parseNameComponent(state));
eatWhite(state);
if(state.pos < state.data.length() && state.data.charAt(state.pos) == ',')
{
@@ -67,14 +83,14 @@ class RFC2253
{
++state.pos;
results.add(current);
- current = new java.util.LinkedList<RDNPair>();
+ current = new RDNEntry();
}
else if(state.pos < state.data.length())
{
throw new ParseException("expected ',' or ';' at `" + state.data.substring(state.pos) + "'");
}
}
- if(!current.isEmpty())
+ if(!current.rdn.isEmpty())
{
results.add(current);
}