You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2021/04/26 14:32:02 UTC
[tomee-tck] 01/03: Not needed anymore,
as we patch in tomee or tomee-jakarta
This is an automated email from the ASF dual-hosted git repository.
jlmonteiro pushed a commit to branch jakartaee9-tck
in repository https://gitbox.apache.org/repos/asf/tomee-tck.git
commit cc0f8779df7871913bfd5806aa57166603fdfb7a
Author: Jean-Louis Monteiro <jl...@tomitribe.com>
AuthorDate: Mon Apr 26 16:29:42 2021 +0200
Not needed anymore, as we patch in tomee or tomee-jakarta
Signed-off-by: Jean-Louis Monteiro <jl...@tomitribe.com>
---
.../apache/openejb/cts/CallbackHandlerImpl.java | 157 ---------------------
1 file changed, 157 deletions(-)
diff --git a/src/main/java/org/apache/openejb/cts/CallbackHandlerImpl.java b/src/main/java/org/apache/openejb/cts/CallbackHandlerImpl.java
deleted file mode 100644
index be3dcaf..0000000
--- a/src/main/java/org/apache/openejb/cts/CallbackHandlerImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.openejb.cts;
-
-import org.apache.catalina.Contained;
-import org.apache.catalina.Container;
-import org.apache.catalina.realm.GenericPrincipal;
-import org.apache.juli.logging.Log;
-import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.res.StringManager;
-
-import jakarta.security.auth.message.callback.CallerPrincipalCallback;
-import jakarta.security.auth.message.callback.GroupPrincipalCallback;
-import jakarta.security.auth.message.callback.PasswordValidationCallback;
-
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * This is a clone of Tomcat default callback handler but with a better handling of the Generic Principals when more than
- * one callback is used.
- *
- * For instance https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/authenticator/jaspic/CallbackHandlerImpl.java#L96
- * keeps adding new Generic Principals even for the same name whereas the authenticator base
- * https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/authenticator/AuthenticatorBase.java#L956
- * randomly picks the first one. So it results in random failures
- *
- * See https://github.com/eclipse-ee4j/jakartaee-tck/issues/575
- */
-public class CallbackHandlerImpl implements CallbackHandler, Contained {
-
- private static final StringManager sm = StringManager.getManager(
- org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl.class);
- private final Log log = LogFactory.getLog(org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl.class); // must not be static
-
- private Container container;
-
-
- @Override
- public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-
- String name = null;
- Principal principal = null;
- Subject subject = null;
- String[] groups = null;
-
- if (callbacks != null) {
- // Need to combine data from multiple callbacks so use this to hold
- // the data
- // Process the callbacks
- for (Callback callback : callbacks) {
- if (callback instanceof CallerPrincipalCallback) {
- CallerPrincipalCallback cpc = (CallerPrincipalCallback) callback;
- name = cpc.getName();
- principal = cpc.getPrincipal();
- subject = cpc.getSubject();
- } else if (callback instanceof GroupPrincipalCallback) {
- GroupPrincipalCallback gpc = (GroupPrincipalCallback) callback;
- groups = gpc.getGroups();
- } else if (callback instanceof PasswordValidationCallback) {
- if (container == null) {
- log.warn(sm.getString("callbackHandlerImpl.containerMissing", callback.getClass().getName()));
- } else if (container.getRealm() == null) {
- log.warn(sm.getString("callbackHandlerImpl.realmMissing",
- callback.getClass().getName(), container.getName()));
- } else {
- PasswordValidationCallback pvc = (PasswordValidationCallback) callback;
- principal = container.getRealm().authenticate(pvc.getUsername(),
- String.valueOf(pvc.getPassword()));
- subject = pvc.getSubject();
- }
- } else {
- log.error(sm.getString("callbackHandlerImpl.jaspicCallbackMissing",
- callback.getClass().getName()));
- }
- }
-
- // Create the GenericPrincipal
- Principal gp = getPrincipal(principal, name, groups);
- if (subject != null && gp != null) {
-
- // merge if needed
- String mergeName = gp.getName();
- List<String> mergeRoles = new ArrayList<>(Arrays.asList(((GenericPrincipal) gp).getRoles()));
- Principal mergePrincipal = ((GenericPrincipal) gp).getUserPrincipal();
-
- for (Object oPrincipal : subject.getPrivateCredentials()) {
- if (!(oPrincipal instanceof GenericPrincipal)) {
- continue;
- }
- final GenericPrincipal privateCredential = (GenericPrincipal) oPrincipal;
- if (mergeName != null && mergeName.equals(privateCredential.getName())) {
- mergeRoles.addAll(Arrays.asList(privateCredential.getRoles()));
- subject.getPrivateCredentials().remove(oPrincipal);
- }
- }
-
- subject.getPrivateCredentials().add(new GenericPrincipal(mergeName, null, mergeRoles, mergePrincipal));
- }
- }
- }
-
- private Principal getPrincipal(Principal principal, String name, String[] groups) {
- // If the Principal is cached in the session JASPIC may simply return it
- if (principal instanceof GenericPrincipal) {
- return principal;
- }
- if (name == null && principal != null) {
- name = principal.getName();
- }
- if (name == null) {
- return null;
- }
- List<String> roles;
- if (groups == null || groups.length == 0) {
- roles = Collections.emptyList();
- } else {
- roles = Arrays.asList(groups);
- }
-
- return new GenericPrincipal(name, null, roles, principal);
- }
-
- // Contained interface methods
- @Override
- public Container getContainer() {
- return this.container;
- }
-
-
- @Override
- public void setContainer(Container container) {
- this.container = container;
- }
-}