summaryrefslogtreecommitdiffstats
path: root/auth/src/main/java/javax/security
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:14 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:14 -0800
commit1c0fed63c71ddb230f3b304aac12caffbedf2f21 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /auth/src/main/java/javax/security
parent2fb02ef3025449e24e756a7f645ea6eab7a1fd4f (diff)
downloadlibcore-1c0fed63c71ddb230f3b304aac12caffbedf2f21.zip
libcore-1c0fed63c71ddb230f3b304aac12caffbedf2f21.tar.gz
libcore-1c0fed63c71ddb230f3b304aac12caffbedf2f21.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'auth/src/main/java/javax/security')
-rw-r--r--auth/src/main/java/javax/security/auth/AuthPermission.java99
-rw-r--r--auth/src/main/java/javax/security/auth/DestroyFailedException.java46
-rw-r--r--auth/src/main/java/javax/security/auth/Destroyable.java45
-rw-r--r--auth/src/main/java/javax/security/auth/PrivateCredentialPermission.java389
-rw-r--r--auth/src/main/java/javax/security/auth/Subject.java784
-rw-r--r--auth/src/main/java/javax/security/auth/SubjectDomainCombiner.java123
-rw-r--r--auth/src/main/java/javax/security/auth/callback/Callback.java27
-rw-r--r--auth/src/main/java/javax/security/auth/callback/CallbackHandler.java54
-rw-r--r--auth/src/main/java/javax/security/auth/callback/PasswordCallback.java126
-rw-r--r--auth/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java66
-rw-r--r--auth/src/main/java/javax/security/auth/callback/package.html22
-rw-r--r--auth/src/main/java/javax/security/auth/login/LoginException.java47
-rw-r--r--auth/src/main/java/javax/security/auth/login/package.html20
-rw-r--r--auth/src/main/java/javax/security/auth/package.html18
-rw-r--r--auth/src/main/java/javax/security/auth/x500/X500Principal.java220
-rw-r--r--auth/src/main/java/javax/security/auth/x500/package.html18
16 files changed, 0 insertions, 2104 deletions
diff --git a/auth/src/main/java/javax/security/auth/AuthPermission.java b/auth/src/main/java/javax/security/auth/AuthPermission.java
deleted file mode 100644
index 06ea3fb..0000000
--- a/auth/src/main/java/javax/security/auth/AuthPermission.java
+++ /dev/null
@@ -1,99 +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 javax.security.auth;
-
-import java.security.BasicPermission;
-
-import org.apache.harmony.auth.internal.nls.Messages;
-
-/**
- * Governs the use of methods in this package and also its subpackages. A
- * <i>target name</i> of the permission specifies which methods are allowed
- * without specifying the concrete action lists. Possible target names and
- * associated authentication permissions are:
- *
- * <pre>
- * doAs invoke Subject.doAs methods.
- * doAsPrivileged invoke the Subject.doAsPrivileged methods.
- * getSubject invoke Subject.getSubject().
- * getSubjectFromDomainCombiner invoke SubjectDomainCombiner.getSubject().
- * setReadOnly invoke Subject.setReadonly().
- * modifyPrincipals modify the set of principals
- * associated with a Subject.
- * modifyPublicCredentials modify the set of public credentials
- * associated with a Subject.
- * modifyPrivateCredentials modify the set of private credentials
- * associated with a Subject.
- * refreshCredential invoke the refresh method on a credential of a
- * refreshable credential class.
- * destroyCredential invoke the destroy method on a credential of a
- * destroyable credential class.
- * createLoginContext.<i>name</i> instantiate a LoginContext with the
- * specified name. The wildcard name ('*')
- * allows to a LoginContext of any name.
- * getLoginConfiguration invoke the getConfiguration method of
- * javax.security.auth.login.Configuration.
- * refreshLoginConfiguration Invoke the refresh method of
- * javax.security.auth.login.Configuration.
- * </pre>
- *
- * @since Android 1.0
- */
-public final class AuthPermission extends BasicPermission {
-
- private static final long serialVersionUID = 5806031445061587174L;
-
- private static final String CREATE_LOGIN_CONTEXT = "createLoginContext"; //$NON-NLS-1$
-
- private static final String CREATE_LOGIN_CONTEXT_ANY = "createLoginContext.*"; //$NON-NLS-1$
-
- // inits permission name.
- private static String init(String name) {
-
- if (name == null) {
- throw new NullPointerException(Messages.getString("auth.13")); //$NON-NLS-1$
- }
-
- if (CREATE_LOGIN_CONTEXT.equals(name)) {
- return CREATE_LOGIN_CONTEXT_ANY;
- }
- return name;
- }
-
- /**
- * Creates an authentication permission with the specified target name.
- *
- * @param name
- * the target name of this authentication permission.
- */
- public AuthPermission(String name) {
- super(init(name));
- }
-
- /**
- * Creates an authentication permission with the specified target name.
- *
- * @param name
- * the target name of this authentication permission.
- * @param actions
- * this parameter is ignored and should be {@code null}.
- */
- public AuthPermission(String name, String actions) {
- super(init(name), actions);
- }
-} \ No newline at end of file
diff --git a/auth/src/main/java/javax/security/auth/DestroyFailedException.java b/auth/src/main/java/javax/security/auth/DestroyFailedException.java
deleted file mode 100644
index a5438a6..0000000
--- a/auth/src/main/java/javax/security/auth/DestroyFailedException.java
+++ /dev/null
@@ -1,46 +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 javax.security.auth;
-
-/**
- * Signals that the {@link Destroyable#destroy()} method failed.
- *
- * @since Android 1.0
- */
-public class DestroyFailedException extends Exception {
-
- private static final long serialVersionUID = -7790152857282749162L;
-
- /**
- * Creates an exception of type {@code DestroyFailedException}.
- */
- public DestroyFailedException() {
- super();
- }
-
- /**
- * Creates an exception of type {@code DestroyFailedException}.
- *
- * @param message
- * A detail message that describes the reason for this exception.
- */
- public DestroyFailedException(String message) {
- super(message);
- }
-
-}
diff --git a/auth/src/main/java/javax/security/auth/Destroyable.java b/auth/src/main/java/javax/security/auth/Destroyable.java
deleted file mode 100644
index 6194db6..0000000
--- a/auth/src/main/java/javax/security/auth/Destroyable.java
+++ /dev/null
@@ -1,45 +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 javax.security.auth;
-
-/**
- * Allows for special treatment of sensitive information, when it comes to
- * destroying or clearing of the data.
- *
- * @since Android 1.0
- */
-public interface Destroyable {
-
- /**
- * Erases the sensitive information. Once an object is destroyed any calls
- * to its methods will throw an {@code IllegalStateException}. If it does
- * not succeed a DestroyFailedException is thrown.
- *
- * @throws DestroyFailedException
- * if the information cannot be erased.
- */
- void destroy() throws DestroyFailedException;
-
- /**
- * Returns {@code true} once an object has been safely destroyed.
- *
- * @return whether the object has been safely destroyed.
- */
- boolean isDestroyed();
-
-}
diff --git a/auth/src/main/java/javax/security/auth/PrivateCredentialPermission.java b/auth/src/main/java/javax/security/auth/PrivateCredentialPermission.java
deleted file mode 100644
index d92ede5..0000000
--- a/auth/src/main/java/javax/security/auth/PrivateCredentialPermission.java
+++ /dev/null
@@ -1,389 +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 javax.security.auth;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Principal;
-import java.util.Set;
-
-import org.apache.harmony.auth.internal.nls.Messages;
-
-/**
- * Protects private credential objects belonging to a {@code Subject}. It has
- * only one action which is "read". The target name of this permission has a
- * special syntax:
- *
- * <pre>
- * targetName = CredentialClass {PrincipalClass &quot;PrincipalName&quot;}*
- * </pre>
- *
- * First it states a credential class and is followed then by a list of one or
- * more principals identifying the subject.
- * <p>
- * The principals on their part are specified as the name of the {@code
- * Principal} class followed by the principal name in quotes. For example, the
- * following file may define permission to read the private credentials of a
- * principal named "Bob": "com.sun.PrivateCredential com.sun.Principal \"Bob\""
- * </p>
- * The syntax also allows the use of the wildcard "*" in place of {@code
- * CredentialClass} or {@code PrincipalClass} and/or {@code PrincipalName}.
- *
- * @see Principal
- * @since Android 1.0
- */
-public final class PrivateCredentialPermission extends Permission {
-
- private static final long serialVersionUID = 5284372143517237068L;
-
- // allowed action
- private static final String READ = "read"; //$NON-NLS-1$
-
- private String credentialClass;
-
- // current offset
- private transient int offset;
-
- // owners set
- private transient CredOwner[] set;
-
- /**
- * Creates a new permission for private credentials specified by the target
- * name {@code name} and an {@code action}. The action is always
- * {@code "read"}.
- *
- * @param name
- * the target name of the permission.
- * @param action
- * the action {@code "read"}.
- */
- public PrivateCredentialPermission(String name, String action) {
- super(name);
- if (READ.equalsIgnoreCase(action)) {
- initTargetName(name);
- } else {
- throw new IllegalArgumentException(Messages.getString("auth.11")); //$NON-NLS-1$
- }
- }
-
- /**
- * Creates a {@code PrivateCredentialPermission} from the {@code Credential}
- * class and set of principals.
- *
- * @param credentialClass
- * the credential class name.
- * @param principals
- * the set of principals.
- */
- PrivateCredentialPermission(String credentialClass, Set<Principal> principals) {
- super(credentialClass);
- this.credentialClass = credentialClass;
-
- set = new CredOwner[principals.size()];
- for (Principal p : principals) {
- CredOwner element = new CredOwner(p.getClass().getName(), p.getName());
- // check for duplicate elements
- boolean found = false;
- for (int ii = 0; ii < offset; ii++) {
- if (set[ii].equals(element)) {
- found = true;
- break;
- }
- }
- if (!found) {
- set[offset++] = element;
- }
- }
- }
-
- /**
- * Initialize a PrivateCredentialPermission object and checks that a target
- * name has a correct format: CredentialClass 1*(PrincipalClass
- * "PrincipalName")
- */
- private void initTargetName(String name) {
-
- if (name == null) {
- throw new NullPointerException(Messages.getString("auth.0E")); //$NON-NLS-1$
- }
-
- // check empty string
- name = name.trim();
- if (name.length() == 0) {
- throw new IllegalArgumentException(Messages.getString("auth.0F")); //$NON-NLS-1$
- }
-
- // get CredentialClass
- int beg = name.indexOf(' ');
- if (beg == -1) {
- throw new IllegalArgumentException(Messages.getString("auth.10")); //$NON-NLS-1$
- }
- credentialClass = name.substring(0, beg);
-
- // get a number of pairs: PrincipalClass "PrincipalName"
- beg++;
- int count = 0;
- int nameLength = name.length();
- for (int i, j = 0; beg < nameLength; beg = j + 2, count++) {
- i = name.indexOf(' ', beg);
- j = name.indexOf('"', i + 2);
-
- if (i == -1 || j == -1 || name.charAt(i + 1) != '"') {
- throw new IllegalArgumentException(Messages.getString("auth.10")); //$NON-NLS-1$
- }
- }
-
- // name MUST have one pair at least
- if (count < 1) {
- throw new IllegalArgumentException(Messages.getString("auth.10")); //$NON-NLS-1$
- }
-
- beg = name.indexOf(' ');
- beg++;
-
- // populate principal set with instances of CredOwner class
- String principalClass;
- String principalName;
-
- set = new CredOwner[count];
- for (int index = 0, i, j; index < count; beg = j + 2, index++) {
- i = name.indexOf(' ', beg);
- j = name.indexOf('"', i + 2);
-
- principalClass = name.substring(beg, i);
- principalName = name.substring(i + 2, j);
-
- CredOwner element = new CredOwner(principalClass, principalName);
- // check for duplicate elements
- boolean found = false;
- for (int ii = 0; ii < offset; ii++) {
- if (set[ii].equals(element)) {
- found = true;
- break;
- }
- }
- if (!found) {
- set[offset++] = element;
- }
- }
- }
-
- private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
- ois.defaultReadObject();
- initTargetName(getName());
- }
-
- /**
- * Returns the principal's classes and names associated with this {@code
- * PrivateCredentialPermission} as a two dimensional array. The first
- * dimension of the array corresponds to the number of principals. The
- * second dimension defines either the name of the {@code PrincipalClass}
- * [x][0] or the value of {@code PrincipalName} [x][1].
- *
- * This corresponds to the the target name's syntax:
- *
- * <pre>
- * targetName = CredentialClass {PrincipalClass &quot;PrincipalName&quot;}*
- * </pre>
- *
- * @return the principal classes and names associated with this {@code
- * PrivateCredentialPermission}.
- */
- public String[][] getPrincipals() {
-
- String[][] s = new String[offset][2];
-
- for (int i = 0; i < s.length; i++) {
- s[i][0] = set[i].principalClass;
- s[i][1] = set[i].principalName;
- }
- return s;
- }
-
- @Override
- public String getActions() {
- return READ;
- }
-
- /**
- * Returns the class name of the credential associated with this permission.
- *
- * @return the class name of the credential associated with this permission.
- */
- public String getCredentialClass() {
- return credentialClass;
- }
-
- @Override
- public int hashCode() {
- int hash = 0;
- for (int i = 0; i < offset; i++) {
- hash = hash + set[i].hashCode();
- }
- return getCredentialClass().hashCode() + hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- }
-
- if (obj == null || this.getClass() != obj.getClass()) {
- return false;
- }
-
- PrivateCredentialPermission that = (PrivateCredentialPermission) obj;
-
- return credentialClass.equals(that.credentialClass) && (offset == that.offset)
- && sameMembers(set, that.set, offset);
- }
-
- @Override
- public boolean implies(Permission permission) {
-
- if (permission == null || this.getClass() != permission.getClass()) {
- return false;
- }
-
- PrivateCredentialPermission that = (PrivateCredentialPermission) permission;
-
- if (!("*".equals(credentialClass) || credentialClass //$NON-NLS-1$
- .equals(that.getCredentialClass()))) {
- return false;
- }
-
- if (that.offset == 0) {
- return true;
- }
-
- CredOwner[] thisCo = set;
- CredOwner[] thatCo = that.set;
- int thisPrincipalsSize = offset;
- int thatPrincipalsSize = that.offset;
- for (int i = 0, j; i < thisPrincipalsSize; i++) {
- for (j = 0; j < thatPrincipalsSize; j++) {
- if (thisCo[i].implies(thatCo[j])) {
- break;
- }
- }
- if (j == thatCo.length) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public PermissionCollection newPermissionCollection() {
- return null;
- }
-
- /**
- * Returns true if the two arrays have the same length, and every member of
- * one array is contained in another array
- */
- private boolean sameMembers(Object[] ar1, Object[] ar2, int length) {
- if (ar1 == null && ar2 == null) {
- return true;
- }
- if (ar1 == null || ar2 == null) {
- return false;
- }
- boolean found;
- for (int i = 0; i < length; i++) {
- found = false;
- for (int j = 0; j < length; j++) {
- if (ar1[i].equals(ar2[j])) {
- found = true;
- break;
- }
- }
- if (!found) {
- return false;
- }
- }
- return true;
- }
-
- private static final class CredOwner implements Serializable {
-
- private static final long serialVersionUID = -5607449830436408266L;
-
- String principalClass;
-
- String principalName;
-
- // whether class name contains wildcards
- private transient boolean isClassWildcard;
-
- // whether pname contains wildcards
- private transient boolean isPNameWildcard;
-
- // Creates a new CredOwner with the specified Principal Class and Principal Name
- CredOwner(String principalClass, String principalName) {
- super();
- if ("*".equals(principalClass)) { //$NON-NLS-1$
- isClassWildcard = true;
- }
-
- if ("*".equals(principalName)) { //$NON-NLS-1$
- isPNameWildcard = true;
- }
-
- if (isClassWildcard && !isPNameWildcard) {
- throw new IllegalArgumentException(Messages.getString("auth.12")); //$NON-NLS-1$
- }
-
- this.principalClass = principalClass;
- this.principalName = principalName;
- }
-
- // Checks if this CredOwner implies the specified Object.
- boolean implies(Object obj) {
- if (obj == this) {
- return true;
- }
-
- CredOwner co = (CredOwner) obj;
-
- if (isClassWildcard || principalClass.equals(co.principalClass)) {
- if (isPNameWildcard || principalName.equals(co.principalName)) {
- return true;
- }
- }
- return false;
- }
-
- // Checks two CredOwner objects for equality.
- @Override
- public boolean equals(Object obj) {
- return principalClass.equals(((CredOwner) obj).principalClass)
- && principalName.equals(((CredOwner) obj).principalName);
- }
-
- // Returns the hash code value for this object.
- @Override
- public int hashCode() {
- return principalClass.hashCode() + principalName.hashCode();
- }
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/Subject.java b/auth/src/main/java/javax/security/auth/Subject.java
deleted file mode 100644
index 5a4cceb..0000000
--- a/auth/src/main/java/javax/security/auth/Subject.java
+++ /dev/null
@@ -1,784 +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 javax.security.auth;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.DomainCombiner;
-import java.security.Permission;
-import java.security.Principal;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.ProtectionDomain;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Set;
-
-import org.apache.harmony.auth.internal.nls.Messages;
-
-/**
- * The central class of the {@code javax.security.auth} package representing an
- * authenticated user or entity (both referred to as "subject"). IT defines also
- * the static methods that allow code to be run, and do modifications according
- * to the subject's permissions.
- * <p>
- * A subject has the following features:
- * <ul>
- * <li>A set of {@code Principal} objects specifying the identities bound to a
- * {@code Subject} that distinguish it.</li>
- * <li>Credentials (public and private) such as certificates, keys, or
- * authentication proofs such as tickets</li>
- * </ul>
- * </p>
- * @since Android 1.0
- */
-public final class Subject implements Serializable {
-
- private static final long serialVersionUID = -8308522755600156056L;
-
- private static final AuthPermission _AS = new AuthPermission("doAs"); //$NON-NLS-1$
-
- private static final AuthPermission _AS_PRIVILEGED = new AuthPermission(
- "doAsPrivileged"); //$NON-NLS-1$
-
- private static final AuthPermission _SUBJECT = new AuthPermission(
- "getSubject"); //$NON-NLS-1$
-
- private static final AuthPermission _PRINCIPALS = new AuthPermission(
- "modifyPrincipals"); //$NON-NLS-1$
-
- private static final AuthPermission _PRIVATE_CREDENTIALS = new AuthPermission(
- "modifyPrivateCredentials"); //$NON-NLS-1$
-
- private static final AuthPermission _PUBLIC_CREDENTIALS = new AuthPermission(
- "modifyPublicCredentials"); //$NON-NLS-1$
-
- private static final AuthPermission _READ_ONLY = new AuthPermission(
- "setReadOnly"); //$NON-NLS-1$
-
- private final Set<Principal> principals;
-
- private boolean readOnly;
-
- // set of private credentials
- private transient SecureSet<Object> privateCredentials;
-
- // set of public credentials
- private transient SecureSet<Object> publicCredentials;
-
- /**
- * The default constructor initializing the sets of public and private
- * credentials and principals with the empty set.
- */
- public Subject() {
- super();
- principals = new SecureSet<Principal>(_PRINCIPALS);
- publicCredentials = new SecureSet<Object>(_PUBLIC_CREDENTIALS);
- privateCredentials = new SecureSet<Object>(_PRIVATE_CREDENTIALS);
-
- readOnly = false;
- }
-
- /**
- * The constructor for the subject, setting its public and private
- * credentials and principals according to the arguments.
- *
- * @param readOnly
- * {@code true} if this {@code Subject} is read-only, thus
- * preventing any modifications to be done.
- * @param subjPrincipals
- * the set of Principals that are attributed to this {@code
- * Subject}.
- * @param pubCredentials
- * the set of public credentials that distinguish this {@code
- * Subject}.
- * @param privCredentials
- * the set of private credentials that distinguish this {@code
- * Subject}.
- */
- public Subject(boolean readOnly, Set<? extends Principal> subjPrincipals,
- Set<?> pubCredentials, Set<?> privCredentials) {
-
- if (subjPrincipals == null || pubCredentials == null || privCredentials == null) {
- throw new NullPointerException();
- }
-
- principals = new SecureSet<Principal>(_PRINCIPALS, subjPrincipals);
- publicCredentials = new SecureSet<Object>(_PUBLIC_CREDENTIALS, pubCredentials);
- privateCredentials = new SecureSet<Object>(_PRIVATE_CREDENTIALS, privCredentials);
-
- this.readOnly = readOnly;
- }
-
- /**
- * Runs the code defined by {@code action} using the permissions granted to
- * the {@code Subject} itself and to the code as well.
- *
- * @param subject
- * the distinguished {@code Subject}.
- * @param action
- * the code to be run.
- * @return the {@code Object} returned when running the {@code action}.
- */
- @SuppressWarnings("unchecked")
- public static Object doAs(Subject subject, PrivilegedAction action) {
-
- checkPermission(_AS);
-
- return doAs_PrivilegedAction(subject, action, AccessController.getContext());
- }
-
- /**
- * Run the code defined by {@code action} using the permissions granted to
- * the {@code Subject} and to the code itself, additionally providing a more
- * specific context.
- *
- * @param subject
- * the distinguished {@code Subject}.
- * @param action
- * the code to be run.
- * @param context
- * the specific context in which the {@code action} is invoked.
- * if {@code null} a new {@link AccessControlContext} is
- * instantiated.
- * @return the {@code Object} returned when running the {@code action}.
- */
- @SuppressWarnings("unchecked")
- public static Object doAsPrivileged(Subject subject, PrivilegedAction action,
- AccessControlContext context) {
-
- checkPermission(_AS_PRIVILEGED);
-
- if (context == null) {
- return doAs_PrivilegedAction(subject, action, new AccessControlContext(
- new ProtectionDomain[0]));
- }
- return doAs_PrivilegedAction(subject, action, context);
- }
-
- // instantiates a new context and passes it to AccessController
- @SuppressWarnings("unchecked")
- private static Object doAs_PrivilegedAction(Subject subject, PrivilegedAction action,
- final AccessControlContext context) {
-
- AccessControlContext newContext;
-
- final SubjectDomainCombiner combiner;
- if (subject == null) {
- // performance optimization
- // if subject is null there is nothing to combine
- combiner = null;
- } else {
- combiner = new SubjectDomainCombiner(subject);
- }
-
- PrivilegedAction dccAction = new PrivilegedAction() {
- public Object run() {
-
- return new AccessControlContext(context, combiner);
- }
- };
-
- newContext = (AccessControlContext) AccessController.doPrivileged(dccAction);
-
- return AccessController.doPrivileged(action, newContext);
- }
-
- /**
- * Runs the code defined by {@code action} using the permissions granted to
- * the subject and to the code itself.
- *
- * @param subject
- * the distinguished {@code Subject}.
- * @param action
- * the code to be run.
- * @return the {@code Object} returned when running the {@code action}.
- * @throws PrivilegedActionException
- * if running the {@code action} throws an exception.
- */
- @SuppressWarnings("unchecked")
- public static Object doAs(Subject subject, PrivilegedExceptionAction action)
- throws PrivilegedActionException {
-
- checkPermission(_AS);
-
- return doAs_PrivilegedExceptionAction(subject, action, AccessController.getContext());
- }
-
- /**
- * Runs the code defined by {@code action} using the permissions granted to
- * the subject and to the code itself, additionally providing a more
- * specific context.
- *
- * @param subject
- * the distinguished {@code Subject}.
- * @param action
- * the code to be run.
- * @param context
- * the specific context in which the {@code action} is invoked.
- * if {@code null} a new {@link AccessControlContext} is
- * instantiated.
- * @return the {@code Object} returned when running the {@code action}.
- * @throws PrivilegedActionException
- * if running the {@code action} throws an exception.
- */
- @SuppressWarnings("unchecked")
- public static Object doAsPrivileged(Subject subject,
- PrivilegedExceptionAction action, AccessControlContext context)
- throws PrivilegedActionException {
-
- checkPermission(_AS_PRIVILEGED);
-
- if (context == null) {
- return doAs_PrivilegedExceptionAction(subject, action,
- new AccessControlContext(new ProtectionDomain[0]));
- }
- return doAs_PrivilegedExceptionAction(subject, action, context);
- }
-
- // instantiates a new context and passes it to AccessController
- @SuppressWarnings("unchecked")
- private static Object doAs_PrivilegedExceptionAction(Subject subject,
- PrivilegedExceptionAction action, final AccessControlContext context)
- throws PrivilegedActionException {
-
- AccessControlContext newContext;
-
- final SubjectDomainCombiner combiner;
- if (subject == null) {
- // performance optimization
- // if subject is null there is nothing to combine
- combiner = null;
- } else {
- combiner = new SubjectDomainCombiner(subject);
- }
-
- PrivilegedAction<AccessControlContext> dccAction = new PrivilegedAction<AccessControlContext>() {
- public AccessControlContext run() {
- return new AccessControlContext(context, combiner);
- }
- };
-
- newContext = AccessController.doPrivileged(dccAction);
-
- return AccessController.doPrivileged(action, newContext);
- }
-
- /**
- * Checks two Subjects for equality. More specifically if the principals,
- * public and private credentials are equal, equality for two {@code
- * Subjects} is implied.
- *
- * @param obj
- * the {@code Object} checked for equality with this {@code
- * Subject}.
- * @return {@code true} if the specified {@code Subject} is equal to this
- * one.
- */
- @Override
- public boolean equals(Object obj) {
-
- if (this == obj) {
- return true;
- }
-
- if (obj == null || this.getClass() != obj.getClass()) {
- return false;
- }
-
- Subject that = (Subject) obj;
-
- if (principals.equals(that.principals)
- && publicCredentials.equals(that.publicCredentials)
- && privateCredentials.equals(that.privateCredentials)) {
- return true;
- }
- return false;
- }
-
- /**
- * Returns this {@code Subject}'s {@link Principal}.
- *
- * @return this {@code Subject}'s {@link Principal}.
- */
- public Set<Principal> getPrincipals() {
- return principals;
- }
-
-
- /**
- * Returns this {@code Subject}'s {@link Principal} which is a subclass of
- * the {@code Class} provided.
- *
- * @param c
- * the {@code Class} as a criteria which the {@code Principal}
- * returned must satisfy.
- * @return this {@code Subject}'s {@link Principal}. Modifications to the
- * returned set of {@code Principal}s do not affect this {@code
- * Subject}'s set.
- */
- public <T extends Principal> Set<T> getPrincipals(Class<T> c) {
- return ((SecureSet<Principal>) principals).get(c);
- }
-
- /**
- * Returns the private credentials associated with this {@code Subject}.
- *
- * @return the private credentials associated with this {@code Subject}.
- */
- public Set<Object> getPrivateCredentials() {
- return privateCredentials;
- }
-
- /**
- * Returns this {@code Subject}'s private credentials which are a subclass
- * of the {@code Class} provided.
- *
- * @param c
- * the {@code Class} as a criteria which the private credentials
- * returned must satisfy.
- * @return this {@code Subject}'s private credentials. Modifications to the
- * returned set of credentials do not affect this {@code Subject}'s
- * credentials.
- */
- public <T> Set<T> getPrivateCredentials(Class<T> c) {
- return privateCredentials.get(c);
- }
-
- /**
- * Returns the public credentials associated with this {@code Subject}.
- *
- * @return the public credentials associated with this {@code Subject}.
- */
- public Set<Object> getPublicCredentials() {
- return publicCredentials;
- }
-
-
- /**
- * Returns this {@code Subject}'s public credentials which are a subclass of
- * the {@code Class} provided.
- *
- * @param c
- * the {@code Class} as a criteria which the public credentials
- * returned must satisfy.
- * @return this {@code Subject}'s public credentials. Modifications to the
- * returned set of credentials do not affect this {@code Subject}'s
- * credentials.
- */
- public <T> Set<T> getPublicCredentials(Class<T> c) {
- return publicCredentials.get(c);
- }
-
- /**
- * Returns a hash code of this {@code Subject}.
- *
- * @return a hash code of this {@code Subject}.
- */
- @Override
- public int hashCode() {
- return principals.hashCode() + privateCredentials.hashCode()
- + publicCredentials.hashCode();
- }
-
- /**
- * Prevents from modifications being done to the credentials and {@link
- * Principal} sets. After setting it to read-only this {@code Subject} can
- * not be made writable again. The destroy method on the credentials still
- * works though.
- */
- public void setReadOnly() {
- checkPermission(_READ_ONLY);
-
- readOnly = true;
- }
-
- /**
- * Returns whether this {@code Subject} is read-only or not.
- *
- * @return whether this {@code Subject} is read-only or not.
- */
- public boolean isReadOnly() {
- return readOnly;
- }
-
- /**
- * Returns a {@code String} representation of this {@code Subject}.
- *
- * @return a {@code String} representation of this {@code Subject}.
- */
- @Override
- public String toString() {
-
- StringBuffer buf = new StringBuffer("Subject:\n"); //$NON-NLS-1$
-
- Iterator<?> it = principals.iterator();
- while (it.hasNext()) {
- buf.append("\tPrincipal: "); //$NON-NLS-1$
- buf.append(it.next());
- buf.append('\n');
- }
-
- it = publicCredentials.iterator();
- while (it.hasNext()) {
- buf.append("\tPublic Credential: "); //$NON-NLS-1$
- buf.append(it.next());
- buf.append('\n');
- }
-
- int offset = buf.length() - 1;
- it = privateCredentials.iterator();
- try {
- while (it.hasNext()) {
- buf.append("\tPrivate Credential: "); //$NON-NLS-1$
- buf.append(it.next());
- buf.append('\n');
- }
- } catch (SecurityException e) {
- buf.delete(offset, buf.length());
- buf.append("\tPrivate Credentials: no accessible information\n"); //$NON-NLS-1$
- }
- return buf.toString();
- }
-
- private void readObject(ObjectInputStream in) throws IOException,
- ClassNotFoundException {
-
- in.defaultReadObject();
-
- publicCredentials = new SecureSet<Object>(_PUBLIC_CREDENTIALS);
- privateCredentials = new SecureSet<Object>(_PRIVATE_CREDENTIALS);
- }
-
- private void writeObject(ObjectOutputStream out) throws IOException {
- out.defaultWriteObject();
- }
-
- /**
- * Returns the {@code Subject} that was last associated with the {@code
- * context} provided as argument.
- *
- * @param context
- * the {@code context} that was associated with the
- * {@code Subject}.
- * @return the {@code Subject} that was last associated with the {@code
- * context} provided as argument.
- */
- public static Subject getSubject(final AccessControlContext context) {
- checkPermission(_SUBJECT);
- if (context == null) {
- throw new NullPointerException(Messages.getString("auth.09")); //$NON-NLS-1$
- }
- PrivilegedAction<DomainCombiner> action = new PrivilegedAction<DomainCombiner>() {
- public DomainCombiner run() {
- return context.getDomainCombiner();
- }
- };
- DomainCombiner combiner = AccessController.doPrivileged(action);
-
- if ((combiner == null) || !(combiner instanceof SubjectDomainCombiner)) {
- return null;
- }
- return ((SubjectDomainCombiner) combiner).getSubject();
- }
-
- // checks passed permission
- private static void checkPermission(Permission p) {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(p);
- }
- }
-
- // FIXME is used only in two places. remove?
- private void checkState() {
- if (readOnly) {
- throw new IllegalStateException(Messages.getString("auth.0A")); //$NON-NLS-1$
- }
- }
-
- private final class SecureSet<SST> extends AbstractSet<SST> implements Serializable {
-
- /**
- * Compatibility issue: see comments for setType variable
- */
- private static final long serialVersionUID = 7911754171111800359L;
-
- private LinkedList<SST> elements;
-
- /*
- * Is used to define a set type for serialization.
- *
- * A type can be principal, priv. or pub. credential set. The spec.
- * doesn't clearly says that priv. and pub. credential sets can be
- * serialized and what classes they are. It is only possible to figure
- * out from writeObject method comments that priv. credential set is
- * serializable and it is an instance of SecureSet class. So pub.
- * credential was implemented by analogy
- *
- * Compatibility issue: the class follows its specified serial form.
- * Also according to the serialization spec. adding new field is a
- * compatible change. So is ok for principal set (because the default
- * value for integer is zero). But priv. or pub. credential set it is
- * not compatible because most probably other implementations resolve
- * this issue in other way
- */
- private int setType;
-
- // Defines principal set for serialization.
- private static final int SET_Principal = 0;
-
- // Defines private credential set for serialization.
- private static final int SET_PrivCred = 1;
-
- // Defines public credential set for serialization.
- private static final int SET_PubCred = 2;
-
- // permission required to modify set
- private transient AuthPermission permission;
-
- protected SecureSet(AuthPermission perm) {
- permission = perm;
- elements = new LinkedList<SST>();
- }
-
- // creates set from specified collection with specified permission
- // all collection elements are verified before adding
- protected SecureSet(AuthPermission perm, Collection<? extends SST> s) {
- this(perm);
-
- // Subject's constructor receives a Set, we can trusts if a set is from bootclasspath,
- // and not to check whether it contains duplicates or not
- boolean trust = s.getClass().getClassLoader() == null;
-
- Iterator<? extends SST> it = s.iterator();
- while (it.hasNext()) {
- SST o = it.next();
- verifyElement(o);
- if (trust || !elements.contains(o)) {
- elements.add(o);
- }
- }
- }
-
- // verifies new set element
- private void verifyElement(Object o) {
-
- if (o == null) {
- throw new NullPointerException();
- }
- if (permission == _PRINCIPALS && !(Principal.class.isAssignableFrom(o.getClass()))) {
- throw new IllegalArgumentException(Messages.getString("auth.0B")); //$NON-NLS-1$
- }
- }
-
- /*
- * verifies specified element, checks set state, and security permission
- * to modify set before adding new element
- */
- @Override
- public boolean add(SST o) {
-
- verifyElement(o);
-
- checkState();
- checkPermission(permission);
-
- if (!elements.contains(o)) {
- elements.add(o);
- return true;
- }
- return false;
- }
-
- // returns an instance of SecureIterator
- @Override
- public Iterator<SST> iterator() {
-
- if (permission == _PRIVATE_CREDENTIALS) {
- /*
- * private credential set requires iterator with additional
- * security check (PrivateCredentialPermission)
- */
- return new SecureIterator(elements.iterator()) {
- /*
- * checks permission to access next private credential moves
- * to the next element even SecurityException was thrown
- */
- @Override
- public SST next() {
- SST obj = iterator.next();
- checkPermission(new PrivateCredentialPermission(obj
- .getClass().getName(), principals));
- return obj;
- }
- };
- }
- return new SecureIterator(elements.iterator());
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
-
- if (c == null) {
- throw new NullPointerException();
- }
- return super.retainAll(c);
- }
-
- @Override
- public int size() {
- return elements.size();
- }
-
- /**
- * return set with elements that are instances or subclasses of the
- * specified class
- */
- protected final <E> Set<E> get(final Class<E> c) {
-
- if (c == null) {
- throw new NullPointerException();
- }
-
- AbstractSet<E> s = new AbstractSet<E>() {
- private LinkedList<E> elements = new LinkedList<E>();
-
- @Override
- public boolean add(E o) {
-
- if (!c.isAssignableFrom(o.getClass())) {
- throw new IllegalArgumentException(
- Messages.getString("auth.0C", c.getName())); //$NON-NLS-1$
- }
-
- if (elements.contains(o)) {
- return false;
- }
- elements.add(o);
- return true;
- }
-
- @Override
- public Iterator<E> iterator() {
- return elements.iterator();
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
-
- if (c == null) {
- throw new NullPointerException();
- }
- return super.retainAll(c);
- }
-
- @Override
- public int size() {
- return elements.size();
- }
- };
-
- // FIXME must have permissions for requested priv. credentials
- for (Iterator<SST> it = iterator(); it.hasNext();) {
- SST o = it.next();
- if (c.isAssignableFrom(o.getClass())) {
- s.add(c.cast(o));
- }
- }
- return s;
- }
-
- private void readObject(ObjectInputStream in) throws IOException,
- ClassNotFoundException {
- in.defaultReadObject();
-
- switch (setType) {
- case SET_Principal:
- permission = _PRINCIPALS;
- break;
- case SET_PrivCred:
- permission = _PRIVATE_CREDENTIALS;
- break;
- case SET_PubCred:
- permission = _PUBLIC_CREDENTIALS;
- break;
- default:
- throw new IllegalArgumentException();
- }
-
- Iterator<SST> it = elements.iterator();
- while (it.hasNext()) {
- verifyElement(it.next());
- }
- }
-
- private void writeObject(ObjectOutputStream out) throws IOException {
-
- if (permission == _PRIVATE_CREDENTIALS) {
- // does security check for each private credential
- for (Iterator<SST> it = iterator(); it.hasNext();) {
- it.next();
- }
- setType = SET_PrivCred;
- } else if (permission == _PRINCIPALS) {
- setType = SET_Principal;
- } else {
- setType = SET_PubCred;
- }
-
- out.defaultWriteObject();
- }
-
- /**
- * Represents iterator for subject's secure set
- */
- private class SecureIterator implements Iterator<SST> {
- protected Iterator<SST> iterator;
-
- protected SecureIterator(Iterator<SST> iterator) {
- this.iterator = iterator;
- }
-
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- public SST next() {
- return iterator.next();
- }
-
- /**
- * checks set state, and security permission to modify set before
- * removing current element
- */
- public void remove() {
- checkState();
- checkPermission(permission);
- iterator.remove();
- }
- }
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/SubjectDomainCombiner.java b/auth/src/main/java/javax/security/auth/SubjectDomainCombiner.java
deleted file mode 100644
index 6a8f00b..0000000
--- a/auth/src/main/java/javax/security/auth/SubjectDomainCombiner.java
+++ /dev/null
@@ -1,123 +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 javax.security.auth;
-
-import java.security.DomainCombiner;
-import java.security.Principal;
-import java.security.ProtectionDomain;
-import java.util.Set;
-
-/**
- * Merges permissions based on code source and code signers with permissions
- * granted to the specified {@link Subject}.
- *
- * @since Android 1.0
- */
-public class SubjectDomainCombiner implements DomainCombiner {
-
- // subject to be associated
- private Subject subject;
-
- // permission required to get a subject object
- private static final AuthPermission _GET = new AuthPermission(
- "getSubjectFromDomainCombiner"); //$NON-NLS-1$
-
- /**
- * Creates a domain combiner for the entity provided in {@code subject}.
- *
- * @param subject
- * the entity to which this domain combiner is associated.
- */
- public SubjectDomainCombiner(Subject subject) {
- super();
- if (subject == null) {
- throw new NullPointerException();
- }
- this.subject = subject;
- }
-
- /**
- * Returns the entity to which this domain combiner is associated.
- *
- * @return the entity to which this domain combiner is associated.
- */
- public Subject getSubject() {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(_GET);
- }
-
- return subject;
- }
-
- /**
- * Merges the {@code ProtectionDomain} with the {@code Principal}s
- * associated with the subject of this {@code SubjectDomainCombiner}.
- *
- * @param currentDomains
- * the {@code ProtectionDomain}s associated with the context of
- * the current thread. The domains must be sorted according to
- * the execution order, the most recent residing at the
- * beginning.
- * @param assignedDomains
- * the {@code ProtectionDomain}s from the parent thread based on
- * code source and signers.
- * @return a single {@code ProtectionDomain} array computed from the two
- * provided arrays, or {@code null}.
- * @see ProtectionDomain
- */
- public ProtectionDomain[] combine(ProtectionDomain[] currentDomains,
- ProtectionDomain[] assignedDomains) {
- // get array length for combining protection domains
- int len = 0;
- if (currentDomains != null) {
- len += currentDomains.length;
- }
- if (assignedDomains != null) {
- len += assignedDomains.length;
- }
- if (len == 0) {
- return null;
- }
-
- ProtectionDomain[] pd = new ProtectionDomain[len];
-
- // for each current domain substitute set of principal with subject's
- int cur = 0;
- if (currentDomains != null) {
-
- Set<Principal> s = subject.getPrincipals();
- Principal[] p = s.toArray(new Principal[s.size()]);
-
- for (cur = 0; cur < currentDomains.length; cur++) {
- ProtectionDomain newPD;
- newPD = new ProtectionDomain(currentDomains[cur].getCodeSource(),
- currentDomains[cur].getPermissions(), currentDomains[cur]
- .getClassLoader(), p);
- pd[cur] = newPD;
- }
- }
-
- // copy assigned domains
- if (assignedDomains != null) {
- System.arraycopy(assignedDomains, 0, pd, cur, assignedDomains.length);
- }
-
- return pd;
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/callback/Callback.java b/auth/src/main/java/javax/security/auth/callback/Callback.java
deleted file mode 100644
index 6cf46b8..0000000
--- a/auth/src/main/java/javax/security/auth/callback/Callback.java
+++ /dev/null
@@ -1,27 +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 javax.security.auth.callback;
-
-/**
- * Defines an empty base interface for all {@code Callback}s used during
- * authentication.
- *
- * @since Android 1.0
- */
-public interface Callback {
-} \ No newline at end of file
diff --git a/auth/src/main/java/javax/security/auth/callback/CallbackHandler.java b/auth/src/main/java/javax/security/auth/callback/CallbackHandler.java
deleted file mode 100644
index a71c558..0000000
--- a/auth/src/main/java/javax/security/auth/callback/CallbackHandler.java
+++ /dev/null
@@ -1,54 +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 javax.security.auth.callback;
-
-/**
- * Needs to be implemented by classes that want to handle authentication
- * {@link Callback}s. A single method {@link #handle(Callback[])} must be
- * provided that checks the type of the incoming {@code Callback}s and reacts
- * accordingly. {@code CallbackHandler}s can be installed per application. It is
- * also possible to configure a system-default {@code CallbackHandler} by
- * setting the {@code auth.login.defaultCallbackHandler} property in the
- * standard {@code security.properties} file.
- *
- * @since Android 1.0
- */
-public interface CallbackHandler {
-
- /**
- * Handles the actual {@link Callback}. A {@code CallbackHandler} needs to
- * implement this method. In the method, it is free to select which {@code
- * Callback}s it actually wants to handle and in which way. For example, a
- * console-based {@code CallbackHandler} might choose to sequentially ask
- * the user for login and password, if it implements these {@code Callback}
- * s, whereas a GUI-based one might open a single dialog window for both
- * values. If a {@code CallbackHandler} is not able to handle a specific
- * {@code Callback}, it needs to throw an
- * {@link UnsupportedCallbackException}.
- *
- * @param callbacks
- * the array of {@code Callback}s that need handling
- * @throws IOException
- * if an I/O related error occurs
- * @throws UnsupportedCallbackException
- * if the {@code CallbackHandler} is not able to handle a
- * specific {@code Callback}
- */
- void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException;
-
-}
diff --git a/auth/src/main/java/javax/security/auth/callback/PasswordCallback.java b/auth/src/main/java/javax/security/auth/callback/PasswordCallback.java
deleted file mode 100644
index 00020fe..0000000
--- a/auth/src/main/java/javax/security/auth/callback/PasswordCallback.java
+++ /dev/null
@@ -1,126 +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 javax.security.auth.callback;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
-import org.apache.harmony.auth.internal.nls.Messages;
-
-/**
- * Is used in conjunction with a {@link CallbackHandler} to retrieve a password
- * when needed.
- *
- * @since Android 1.0
- */
-public class PasswordCallback implements Callback, Serializable {
-
- private static final long serialVersionUID = 2267422647454909926L;
-
- private String prompt;
-
- boolean echoOn;
-
- private char[] inputPassword;
-
- private void setPrompt(String prompt) throws IllegalArgumentException {
- if (prompt == null || prompt.length() == 0) {
- throw new IllegalArgumentException(Messages.getString("auth.14")); //$NON-NLS-1$
- }
- this.prompt = prompt;
- }
-
- /**
- * Creates a new {@code PasswordCallback} instance.
- *
- * @param prompt
- * the message that should be displayed to the user
- * @param echoOn
- * determines whether the user input should be echoed
- */
- public PasswordCallback(String prompt, boolean echoOn) {
- super();
- setPrompt(prompt);
- this.echoOn = echoOn;
- }
-
- /**
- * Returns the prompt that was specified when creating this {@code
- * PasswordCallback}
- *
- * @return the prompt
- */
- public String getPrompt() {
- return prompt;
- }
-
- /**
- * Queries whether this {@code PasswordCallback} expects user input to be
- * echoed, which is specified during the creation of the object.
- *
- * @return {@code true} if (and only if) user input should be echoed
- */
- public boolean isEchoOn() {
- return echoOn;
- }
-
- /**
- * Sets the password. The {@link CallbackHandler} that performs the actual
- * provisioning or input of the password needs to call this method to hand
- * back the password to the security service that requested it.
- *
- * @param password
- * the password. A copy of this is stored, so subsequent changes
- * to the input array do not affect the {@code PasswordCallback}.
- */
- public void setPassword(char[] password) {
- if (password == null) {
- this.inputPassword = password;
- } else {
- inputPassword = new char[password.length];
- System.arraycopy(password, 0, inputPassword, 0, inputPassword.length);
- }
- }
-
- /**
- * Returns the password. The security service that needs the password
- * usually calls this method once the {@link CallbackHandler} has finished
- * its work.
- *
- * @return the password. A copy of the internal password is created and
- * returned, so subsequent changes to the internal password do not
- * affect the result.
- */
- public char[] getPassword() {
- if (inputPassword != null) {
- char[] tmp = new char[inputPassword.length];
- System.arraycopy(inputPassword, 0, tmp, 0, tmp.length);
- return tmp;
- }
- return null;
- }
-
- /**
- * Clears the password stored in this {@code PasswordCallback}.
- */
- public void clearPassword() {
- if (inputPassword != null) {
- Arrays.fill(inputPassword, '\u0000');
- }
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java b/auth/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java
deleted file mode 100644
index d40ff45..0000000
--- a/auth/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java
+++ /dev/null
@@ -1,66 +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 javax.security.auth.callback;
-
-/**
- * Thrown when a {@link CallbackHandler} does not support a particular {@link
- * Callback}.
- *
- * @since Android 1.0
- */
-public class UnsupportedCallbackException extends Exception {
-
- private static final long serialVersionUID = -6873556327655666839L;
-
- private Callback callback;
-
- /**
- * Creates a new exception instance and initializes it with just the
- * unsupported {@code Callback}, but no error message.
- *
- * @param callback
- * the {@code Callback}
- */
- public UnsupportedCallbackException(Callback callback) {
- super();
- this.callback = callback;
- }
-
- /**
- * Creates a new exception instance and initializes it with both the
- * unsupported {@code Callback} and an error message.
- *
- * @param callback
- * the {@code Callback}
- * @param message
- * the error message
- */
- public UnsupportedCallbackException(Callback callback, String message) {
- super(message);
- this.callback = callback;
- }
-
- /**
- * Returns the unsupported {@code Callback} that triggered this exception.
- *
- * @return the {@code Callback}
- */
- public Callback getCallback() {
- return callback;
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/callback/package.html b/auth/src/main/java/javax/security/auth/callback/package.html
deleted file mode 100644
index 5446ab8..0000000
--- a/auth/src/main/java/javax/security/auth/callback/package.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
-</head>
-<html>
-<body>
-<p>
-This package provides classes and interfaces needed to interact with the
-application in order to execute the authentification and authorization
-processes. It is a classical callback mechanism: one retrieves information (i.e.
-for authentification purposes) and one display some messages (for example error
-messages).
-</p>
-<p>
-Note that the current implementation of this package is not complete, that is,
-not compatible with desktop implementations of the Java programming language.
-It contains only what was needed to make the compiler happy, that is, classes
-required by other packages.
-</p>
-@since Android 1.0
-</body>
-</html> \ No newline at end of file
diff --git a/auth/src/main/java/javax/security/auth/login/LoginException.java b/auth/src/main/java/javax/security/auth/login/LoginException.java
deleted file mode 100644
index a1d6ec0..0000000
--- a/auth/src/main/java/javax/security/auth/login/LoginException.java
+++ /dev/null
@@ -1,47 +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 javax.security.auth.login;
-
-import java.security.GeneralSecurityException;
-
-/**
- * Base class for exceptions that are thrown when a login error occurs.
- *
- * @since Android 1.0
- */
-public class LoginException extends GeneralSecurityException {
-
- private static final long serialVersionUID = -4679091624035232488L;
-
- /**
- * Creates a new exception instance and initializes it with default values.
- */
- public LoginException() {
- super();
- }
-
- /**
- * Creates a new exception instance and initializes it with a given message.
- *
- * @param message the error message
- */
- public LoginException(String message) {
- super(message);
- }
-
-}
diff --git a/auth/src/main/java/javax/security/auth/login/package.html b/auth/src/main/java/javax/security/auth/login/package.html
deleted file mode 100644
index 382b487..0000000
--- a/auth/src/main/java/javax/security/auth/login/package.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
-</head>
-<html>
-<body>
-<p>
-This package provides a pluggable and stackable authentication system based on
-ideas and concepts from the Unix-PAM module. New authentication methods can be
-specified simply via a new LoginModule and chained together with the existing
-ones.
-</p>
-Note that the current implementation of this package is not complete, that is,
-not compatible with desktop implementations of the Java programming language.
-It contains only what was needed to make the compiler happy, that is, classes
-required by other packages.
-</p>
-@since Android 1.0
-</body>
-</html> \ No newline at end of file
diff --git a/auth/src/main/java/javax/security/auth/package.html b/auth/src/main/java/javax/security/auth/package.html
deleted file mode 100644
index 2bca2db..0000000
--- a/auth/src/main/java/javax/security/auth/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
-</head>
-<html>
-<body>
-<p>
-This package provides the classes and interfaces needed to implemenet and program
-different methods of users' authentification and role based users' authorization.
-
-All subjects' authentification and role based authorization are strongly coupled with
-the java.security file that, as always, is the ultimate arbiter of all matters secure in Android.
-For example the class <i>javax.security.auth.SubjectDomainCombiner</i> updates the
-ProtectionDomains associated with the actual class with the subjects defined therein.
-</p>
-@since Android 1.0
-</body>
-</html>
diff --git a/auth/src/main/java/javax/security/auth/x500/X500Principal.java b/auth/src/main/java/javax/security/auth/x500/X500Principal.java
deleted file mode 100644
index fa9dfe8..0000000
--- a/auth/src/main/java/javax/security/auth/x500/X500Principal.java
+++ /dev/null
@@ -1,220 +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 javax.security.auth.x500;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.security.Principal;
-
-import org.apache.harmony.auth.internal.nls.Messages;
-import org.apache.harmony.security.x501.Name;
-
-/**
- * Represents an X.500 principal, which holds the distinguished name of some
- * network entity. An example of a distinguished name is {@code "O=Google,
- * OU=Android, C=US"}. The class can be instantiated from a byte representation
- * of an object identifier (OID), an ASN.1 DER-encoded version, or a simple
- * string holding the distinguished name. The representations must follow either
- * RFC 2253, RFC 1779, or RFC2459.
- *
- * @since Android 1.0
- */
-public final class X500Principal implements Serializable, Principal {
-
- private static final long serialVersionUID = -500463348111345721L;
-
- /**
- * Defines a constant for the canonical string format of distinguished
- * names.
- */
- public static final String CANONICAL = "CANONICAL"; //$NON-NLS-1$
-
- /**
- * Defines a constant for the RFC 1779 string format of distinguished
- * names.
- */
- public static final String RFC1779 = "RFC1779"; //$NON-NLS-1$
-
- /**
- * Defines a constant for the RFC 2253 string format of distinguished
- * names.
- */
- public static final String RFC2253 = "RFC2253"; //$NON-NLS-1$
-
- //Distinguished Name
- private transient Name dn;
-
- /**
- * Creates a new X500Principal from a given ASN.1 DER encoding of a
- * distinguished name.
- *
- * @param name
- * the ASN.1 DER-encoded distinguished name
- *
- * @throws IllegalArgumentException
- * if the ASN.1 DER-encoded distinguished name is incorrect
- */
- public X500Principal(byte[] name) {
- super();
- if (name == null) {
- throw new IllegalArgumentException(Messages.getString("auth.00")); //$NON-NLS-1$
- }
- try {
- // FIXME dn = new Name(name);
- dn = (Name) Name.ASN1.decode(name);
- } catch (IOException e) {
- IllegalArgumentException iae = new IllegalArgumentException(Messages
- .getString("auth.2B")); //$NON-NLS-1$
- iae.initCause(e);
- throw iae;
- }
- }
-
- /**
- * Creates a new X500Principal from a given ASN.1 DER encoding of a
- * distinguished name.
- *
- * @param in
- * an {@code InputStream} holding the ASN.1 DER-encoded
- * distinguished name
- *
- * @throws IllegalArgumentException
- * if the ASN.1 DER-encoded distinguished name is incorrect
- */
- public X500Principal(InputStream in) {
- super();
- if (in == null) {
- throw new NullPointerException(Messages.getString("auth.2C")); //$NON-NLS-1$
- }
- try {
- // FIXME dn = new Name(is);
- dn = (Name) Name.ASN1.decode(in);
- } catch (IOException e) {
- IllegalArgumentException iae = new IllegalArgumentException(Messages
- .getString("auth.2B")); //$NON-NLS-1$
- iae.initCause(e);
- throw iae;
- }
- }
-
- /**
- * Creates a new X500Principal from a string representation of a
- * distinguished name.
- *
- * @param name
- * the string representation of the distinguished name
- *
- * @throws IllegalArgumentException
- * if the string representation of the distinguished name is
- * incorrect
- */
- public X500Principal(String name) {
- super();
- if (name == null) {
- throw new NullPointerException(Messages.getString("auth.00")); //$NON-NLS-1$
- }
- try {
- dn = new Name(name);
- } catch (IOException e) {
- IllegalArgumentException iae = new IllegalArgumentException(Messages
- .getString("auth.2D")); //$NON-NLS-1$
- iae.initCause(e);
- throw iae;
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || this.getClass() != o.getClass()) {
- return false;
- }
- X500Principal principal = (X500Principal) o;
- return dn.getName(CANONICAL).equals(principal.dn.getName(CANONICAL));
- }
-
- /**
- * Returns an ASN.1 DER-encoded representation of the distinguished name
- * contained in this X.500 principal.
- *
- * @return the ASN.1 DER-encoded representation
- */
- public byte[] getEncoded() {
- byte[] src = dn.getEncoded();
- byte[] dst = new byte[src.length];
- System.arraycopy(src, 0, dst, 0, dst.length);
- return dst;
- }
-
- /**
- * Returns a human-readable string representation of the distinguished name
- * contained in this X.500 principal.
- *
- * @return the string representation
- */
- public String getName() {
- return dn.getName(RFC2253);
- }
-
- /**
- * Returns a string representation of the distinguished name contained in
- * this X.500 principal. The format of the representation can be chosen.
- * Valid arguments are {@link #RFC1779}, {@link #RFC2253}, and
- * {@link #CANONICAL}. The representations are specified in RFC 1779 and RFC
- * 2253, respectively. The canonical form is based on RFC 2253, but adds
- * some canonicalizing operations like removing leading and trailing
- * whitespace, lower-casing the whole name, and bringing it into a
- * normalized Unicode representation.
- *
- * @param format
- * the name of the format to use for the representation
- *
- * @return the string representation
- *
- * @throws IllegalArgumentException
- * if the {@code format} argument is not one of the three
- * mentioned above
- */
- public String getName(String format) {
- return dn.getName(format);
- }
-
- @Override
- public int hashCode() {
- return dn.getName(CANONICAL).hashCode();
- }
-
- @Override
- public String toString() {
- return dn.getName(RFC1779);
- }
-
- private void writeObject(ObjectOutputStream out) throws IOException {
- out.writeObject(dn.getEncoded());
- }
-
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-
- dn = (Name) Name.ASN1.decode((byte[]) in.readObject());
- }
-}
diff --git a/auth/src/main/java/javax/security/auth/x500/package.html b/auth/src/main/java/javax/security/auth/x500/package.html
deleted file mode 100644
index 58d27ac..0000000
--- a/auth/src/main/java/javax/security/auth/x500/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
-</head>
-<html>
-<body>
-<p>
-This package provides classes needed to store X.500 principals and their
-credentials.
-</p>
-Note that the current implementation of this package is not complete, that is,
-not compatible with desktop implementations of the Java programming language.
-It contains only what was needed to make the compiler happy, that is, classes
-required by other packages.
-</p>
-@since Android 1.0
-</body>
-</html>