From 092f731601777cf84fd9af2629439174b1b38fe5 Mon Sep 17 00:00:00 2001 From: Sara Bertocco <bertocco@oats.inaf.it> Date: Thu, 10 Nov 2016 17:35:47 +0100 Subject: [PATCH] Fix to support TERENA certificates --- .../ac/server/web/ResetPasswordServlet.java | 36 ++++++++++++++----- .../ac/server/web/UserRequestServlet.java | 32 ++++++++++++----- 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java b/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java index 2ba87dfb..86cb2900 100644 --- a/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java +++ b/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java @@ -104,6 +104,8 @@ import ca.nrc.cadc.auth.ServletPrincipalExtractor; import ca.nrc.cadc.log.ServletLogInfo; import ca.nrc.cadc.net.TransientException; import ca.nrc.cadc.util.StringUtil; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Servlet to handle password resets. Passwords are an integral part of the @@ -133,26 +135,44 @@ public class ResetPasswordServlet extends HttpServlet String httpUsers = config.getInitParameter(ResetPasswordServlet.class.getName() + ".PrivilegedHttpPrincipals"); log.debug("privilegedHttpUsers: " + httpUsers); - String[] x500List = new String[0]; - String[] httpList = new String[0]; + List<String> x500List = new ArrayList<String>(); + List<String> httpList = new ArrayList<String>(); if (x500Users != null && httpUsers != null) { - x500List = x500Users.split(" "); - httpList = httpUsers.split(" "); + Pattern pattern = Pattern.compile("([^\"]\\S*|\".+?\")\\s*"); + Matcher x500Matcher = pattern.matcher(x500Users); + Matcher httpMatcher = pattern.matcher(httpUsers); - if (x500List.length != httpList.length) + while (x500Matcher.find()) + { + String next = x500Matcher.group(1); + x500List.add(next.replace("\"", "")); + } + + while (httpMatcher.find()) + { + String next = httpMatcher.group(1); + httpList.add(next.replace("\"", "")); + } + + if (x500List.size() != httpList.size()) { throw new RuntimeException("Init exception: Lists of augment subject principals not equivalent in length"); } privilegedSubjects = new ArrayList<Subject>(x500Users.length()); - for (int i=0; i<x500List.length; i++) + for (int i=0; i<x500List.size(); i++) { Subject s = new Subject(); - s.getPrincipals().add(new X500Principal(x500List[i])); - s.getPrincipals().add(new HttpPrincipal(httpList[i])); + s.getPrincipals().add(new X500Principal(x500List.get(i))); + s.getPrincipals().add(new HttpPrincipal(httpList.get(i))); privilegedSubjects.add(s); } + + } + else + { + log.warn("No Privileged users configured."); } PluginFactory pluginFactory = new PluginFactory(); diff --git a/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java b/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java index 7b938b3b..febe8174 100644 --- a/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java +++ b/cadc-access-control-server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java @@ -98,6 +98,8 @@ import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.auth.ServletPrincipalExtractor; import ca.nrc.cadc.profiler.Profiler; import ca.nrc.cadc.util.StringUtil; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class UserRequestServlet extends HttpServlet { @@ -121,26 +123,40 @@ public class UserRequestServlet extends HttpServlet String httpUsers = config.getInitParameter(UserRequestServlet.class.getName() + ".PrivilegedHttpPrincipals"); log.debug("PrivilegedHttpUsers: " + httpUsers); - String[] x500List = new String[0]; - String[] httpList = new String[0]; + List<String> x500List = new ArrayList<String>(); + List<String> httpList = new ArrayList<String>(); if (x500Users != null && httpUsers != null) { - x500List = x500Users.split(" "); - httpList = httpUsers.split(" "); + Pattern pattern = Pattern.compile("([^\"]\\S*|\".+?\")\\s*"); + Matcher x500Matcher = pattern.matcher(x500Users); + Matcher httpMatcher = pattern.matcher(httpUsers); - if (x500List.length != httpList.length) + while (x500Matcher.find()) + { + String next = x500Matcher.group(1); + x500List.add(next.replace("\"", "")); + } + + while (httpMatcher.find()) + { + String next = httpMatcher.group(1); + httpList.add(next.replace("\"", "")); + } + + if (x500List.size() != httpList.size()) { throw new RuntimeException("Init exception: Lists of augment subject principals not equivalent in length"); } privilegedSubjects = new ArrayList<Subject>(x500Users.length()); - for (int i = 0; i < x500List.length; i++) + for (int i=0; i<x500List.size(); i++) { Subject s = new Subject(); - s.getPrincipals().add(new X500Principal(x500List[i])); - s.getPrincipals().add(new HttpPrincipal(httpList[i])); + s.getPrincipals().add(new X500Principal(x500List.get(i))); + s.getPrincipals().add(new HttpPrincipal(httpList.get(i))); privilegedSubjects.add(s); } + } else { -- GitLab