diff options
author | Mark Spruiell <mes@zeroc.com> | 2009-08-03 15:34:00 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2009-08-03 15:34:00 -0700 |
commit | e54654cf238a719e5ed7632defe397931beb569f (patch) | |
tree | 52ee683eed4232cb5e06c0f2013af2b13060edf2 /java/src/IceSSL/RFC2253.java | |
parent | 4171 - Global namespace pollution (diff) | |
download | ice-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.java | 28 |
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); } |