This commit is contained in:
Phil Race 2015-04-29 08:52:47 -07:00
commit 60bb43ad32
55 changed files with 1220 additions and 1413 deletions

View File

@ -32,9 +32,9 @@ import sun.reflect.Reflection;
/**
* Every Java application has a single instance of class
* <code>Runtime</code> that allows the application to interface with
* {@code Runtime} that allows the application to interface with
* the environment in which the application is running. The current
* runtime can be obtained from the <code>getRuntime</code> method.
* runtime can be obtained from the {@code getRuntime} method.
* <p>
* An application cannot create its own instance of this class.
*
@ -48,10 +48,10 @@ public class Runtime {
/**
* Returns the runtime object associated with the current Java application.
* Most of the methods of class <code>Runtime</code> are instance
* Most of the methods of class {@code Runtime} are instance
* methods and must be invoked with respect to the current runtime object.
*
* @return the <code>Runtime</code> object associated with the current
* @return the {@code Runtime} object associated with the current
* Java application.
*/
public static Runtime getRuntime() {
@ -72,8 +72,7 @@ public class Runtime {
* if any, are started in some unspecified order and allowed to run
* concurrently until they finish. In the second phase all uninvoked
* finalizers are run if {@link #runFinalizersOnExit finalization-on-exit}
* has been enabled. Once this is done the virtual machine {@link #halt
* halts}.
* has been enabled. Once this is done the virtual machine {@link #halt halts}.
*
* <p> If this method is invoked after the virtual machine has begun its
* shutdown sequence then if shutdown hooks are being run this method will
@ -82,7 +81,7 @@ public class Runtime {
* with the given status code if the status is nonzero; otherwise, it
* blocks indefinitely.
*
* <p> The <tt>{@link System#exit(int) System.exit}</tt> method is the
* <p> The {@link System#exit(int) System.exit} method is the
* conventional and convenient means of invoking this method.
*
* @param status
@ -90,8 +89,8 @@ public class Runtime {
* indicates abnormal termination.
*
* @throws SecurityException
* If a security manager is present and its <tt>{@link
* SecurityManager#checkExit checkExit}</tt> method does not permit
* If a security manager is present and its
* {@link SecurityManager#checkExit checkExit} method does not permit
* exiting with the specified status
*
* @see java.lang.SecurityException
@ -118,11 +117,11 @@ public class Runtime {
* <ul>
*
* <li> The program <i>exits</i> normally, when the last non-daemon
* thread exits or when the <tt>{@link #exit exit}</tt> (equivalently,
* thread exits or when the {@link #exit exit} (equivalently,
* {@link System#exit(int) System.exit}) method is invoked, or
*
* <li> The virtual machine is <i>terminated</i> in response to a
* user interrupt, such as typing <tt>^C</tt>, or a system-wide event,
* user interrupt, such as typing {@code ^C}, or a system-wide event,
* such as user logoff or system shutdown.
*
* </ul>
@ -134,17 +133,16 @@ public class Runtime {
* run all uninvoked finalizers if finalization-on-exit has been enabled.
* Finally, the virtual machine will halt. Note that daemon threads will
* continue to run during the shutdown sequence, as will non-daemon threads
* if shutdown was initiated by invoking the <tt>{@link #exit exit}</tt>
* method.
* if shutdown was initiated by invoking the {@link #exit exit} method.
*
* <p> Once the shutdown sequence has begun it can be stopped only by
* invoking the <tt>{@link #halt halt}</tt> method, which forcibly
* invoking the {@link #halt halt} method, which forcibly
* terminates the virtual machine.
*
* <p> Once the shutdown sequence has begun it is impossible to register a
* new shutdown hook or de-register a previously-registered hook.
* Attempting either of these operations will cause an
* <tt>{@link IllegalStateException}</tt> to be thrown.
* {@link IllegalStateException} to be thrown.
*
* <p> Shutdown hooks run at a delicate time in the life cycle of a virtual
* machine and should therefore be coded defensively. They should, in
@ -156,7 +154,7 @@ public class Runtime {
* deadlocks.
*
* <p> Shutdown hooks should also finish their work quickly. When a
* program invokes <tt>{@link #exit exit}</tt> the expectation is
* program invokes {@link #exit exit} the expectation is
* that the virtual machine will promptly shut down and exit. When the
* virtual machine is terminated due to user logoff or system shutdown the
* underlying operating system may only allow a fixed amount of time in
@ -165,17 +163,17 @@ public class Runtime {
* hook.
*
* <p> Uncaught exceptions are handled in shutdown hooks just as in any
* other thread, by invoking the <tt>{@link ThreadGroup#uncaughtException
* uncaughtException}</tt> method of the thread's <tt>{@link
* ThreadGroup}</tt> object. The default implementation of this method
* prints the exception's stack trace to <tt>{@link System#err}</tt> and
* other thread, by invoking the
* {@link ThreadGroup#uncaughtException uncaughtException} method of the
* thread's {@link ThreadGroup} object. The default implementation of this
* method prints the exception's stack trace to {@link System#err} and
* terminates the thread; it does not cause the virtual machine to exit or
* halt.
*
* <p> In rare circumstances the virtual machine may <i>abort</i>, that is,
* stop running without shutting down cleanly. This occurs when the
* virtual machine is terminated externally, for example with the
* <tt>SIGKILL</tt> signal on Unix or the <tt>TerminateProcess</tt> call on
* {@code SIGKILL} signal on Unix or the {@code TerminateProcess} call on
* Microsoft Windows. The virtual machine may also abort if a native
* method goes awry by, for example, corrupting internal data structures or
* attempting to access nonexistent memory. If the virtual machine aborts
@ -183,7 +181,7 @@ public class Runtime {
* will be run.
*
* @param hook
* An initialized but unstarted <tt>{@link Thread}</tt> object
* An initialized but unstarted {@link Thread} object
*
* @throws IllegalArgumentException
* If the specified hook has already been registered,
@ -196,7 +194,7 @@ public class Runtime {
*
* @throws SecurityException
* If a security manager is present and it denies
* <tt>{@link RuntimePermission}("shutdownHooks")</tt>
* {@link RuntimePermission}("shutdownHooks")
*
* @see #removeShutdownHook
* @see #halt(int)
@ -212,11 +210,11 @@ public class Runtime {
}
/**
* De-registers a previously-registered virtual-machine shutdown hook. <p>
* De-registers a previously-registered virtual-machine shutdown hook.
*
* @param hook the hook to remove
* @return <tt>true</tt> if the specified hook had previously been
* registered and was successfully de-registered, <tt>false</tt>
* @return {@code true} if the specified hook had previously been
* registered and was successfully de-registered, {@code false}
* otherwise.
*
* @throws IllegalStateException
@ -225,7 +223,7 @@ public class Runtime {
*
* @throws SecurityException
* If a security manager is present and it denies
* <tt>{@link RuntimePermission}("shutdownHooks")</tt>
* {@link RuntimePermission}("shutdownHooks")
*
* @see #addShutdownHook
* @see #exit(int)
@ -244,23 +242,23 @@ public class Runtime {
* method never returns normally.
*
* <p> This method should be used with extreme caution. Unlike the
* <tt>{@link #exit exit}</tt> method, this method does not cause shutdown
* {@link #exit exit} method, this method does not cause shutdown
* hooks to be started and does not run uninvoked finalizers if
* finalization-on-exit has been enabled. If the shutdown sequence has
* already been initiated then this method does not wait for any running
* shutdown hooks or finalizers to finish their work.
*
* @param status
* Termination status. By convention, a nonzero status code
* indicates abnormal termination. If the <tt>{@link Runtime#exit
* exit}</tt> (equivalently, <tt>{@link System#exit(int)
* System.exit}</tt>) method has already been invoked then this
* status code will override the status code passed to that method.
* Termination status. By convention, a nonzero status code
* indicates abnormal termination. If the {@link Runtime#exit exit}
* (equivalently, {@link System#exit(int) System.exit}) method
* has already been invoked then this status code
* will override the status code passed to that method.
*
* @throws SecurityException
* If a security manager is present and its <tt>{@link
* SecurityManager#checkExit checkExit}</tt> method does not permit
* an exit with the specified status
* If a security manager is present and its
* {@link SecurityManager#checkExit checkExit} method
* does not permit an exit with the specified status
*
* @see #exit
* @see #addShutdownHook
@ -282,7 +280,7 @@ public class Runtime {
* By default, finalization on exit is disabled.
*
* <p>If there is a security manager,
* its <code>checkExit</code> method is first called
* its {@code checkExit} method is first called
* with 0 as its argument to ensure the exit is allowed.
* This could result in a SecurityException.
*
@ -293,7 +291,7 @@ public class Runtime {
* behavior or deadlock.
*
* @throws SecurityException
* if a security manager exists and its <code>checkExit</code>
* if a security manager exists and its {@code checkExit}
* method doesn't allow the exit.
*
* @see java.lang.Runtime#exit(int)
@ -318,9 +316,9 @@ public class Runtime {
* Executes the specified string command in a separate process.
*
* <p>This is a convenience method. An invocation of the form
* <tt>exec(command)</tt>
* {@code exec(command)}
* behaves in exactly the same way as the invocation
* <tt>{@link #exec(String, String[], File) exec}(command, null, null)</tt>.
* {@link #exec(String, String[], File) exec}{@code (command, null, null)}.
*
* @param command a specified system command.
*
@ -335,10 +333,10 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>command</code> is <code>null</code>
* If {@code command} is {@code null}
*
* @throws IllegalArgumentException
* If <code>command</code> is empty
* If {@code command} is empty
*
* @see #exec(String[], String[], File)
* @see ProcessBuilder
@ -352,16 +350,16 @@ public class Runtime {
* specified environment.
*
* <p>This is a convenience method. An invocation of the form
* <tt>exec(command, envp)</tt>
* {@code exec(command, envp)}
* behaves in exactly the same way as the invocation
* <tt>{@link #exec(String, String[], File) exec}(command, envp, null)</tt>.
* {@link #exec(String, String[], File) exec}{@code (command, envp, null)}.
*
* @param command a specified system command.
*
* @param envp array of strings, each element of which
* has environment variable settings in the format
* <i>name</i>=<i>value</i>, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the environment of the current process.
*
* @return A new {@link Process} object for managing the subprocess
@ -375,11 +373,11 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>command</code> is <code>null</code>,
* or one of the elements of <code>envp</code> is <code>null</code>
* If {@code command} is {@code null},
* or one of the elements of {@code envp} is {@code null}
*
* @throws IllegalArgumentException
* If <code>command</code> is empty
* If {@code command} is empty
*
* @see #exec(String[], String[], File)
* @see ProcessBuilder
@ -393,29 +391,29 @@ public class Runtime {
* specified environment and working directory.
*
* <p>This is a convenience method. An invocation of the form
* <tt>exec(command, envp, dir)</tt>
* {@code exec(command, envp, dir)}
* behaves in exactly the same way as the invocation
* <tt>{@link #exec(String[], String[], File) exec}(cmdarray, envp, dir)</tt>,
* where <code>cmdarray</code> is an array of all the tokens in
* <code>command</code>.
* {@link #exec(String[], String[], File) exec}{@code (cmdarray, envp, dir)},
* where {@code cmdarray} is an array of all the tokens in
* {@code command}.
*
* <p>More precisely, the <code>command</code> string is broken
* <p>More precisely, the {@code command} string is broken
* into tokens using a {@link StringTokenizer} created by the call
* <code>new {@link StringTokenizer}(command)</code> with no
* {@code new {@link StringTokenizer}(command)} with no
* further modification of the character categories. The tokens
* produced by the tokenizer are then placed in the new string
* array <code>cmdarray</code>, in the same order.
* array {@code cmdarray}, in the same order.
*
* @param command a specified system command.
*
* @param envp array of strings, each element of which
* has environment variable settings in the format
* <i>name</i>=<i>value</i>, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the environment of the current process.
*
* @param dir the working directory of the subprocess, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the working directory of the current process.
*
* @return A new {@link Process} object for managing the subprocess
@ -429,11 +427,11 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>command</code> is <code>null</code>,
* or one of the elements of <code>envp</code> is <code>null</code>
* If {@code command} is {@code null},
* or one of the elements of {@code envp} is {@code null}
*
* @throws IllegalArgumentException
* If <code>command</code> is empty
* If {@code command} is empty
*
* @see ProcessBuilder
* @since 1.3
@ -454,9 +452,9 @@ public class Runtime {
* Executes the specified command and arguments in a separate process.
*
* <p>This is a convenience method. An invocation of the form
* <tt>exec(cmdarray)</tt>
* {@code exec(cmdarray)}
* behaves in exactly the same way as the invocation
* <tt>{@link #exec(String[], String[], File) exec}(cmdarray, null, null)</tt>.
* {@link #exec(String[], String[], File) exec}{@code (cmdarray, null, null)}.
*
* @param cmdarray array containing the command to call and
* its arguments.
@ -472,12 +470,12 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>cmdarray</code> is <code>null</code>,
* or one of the elements of <code>cmdarray</code> is <code>null</code>
* If {@code cmdarray} is {@code null},
* or one of the elements of {@code cmdarray} is {@code null}
*
* @throws IndexOutOfBoundsException
* If <code>cmdarray</code> is an empty array
* (has length <code>0</code>)
* If {@code cmdarray} is an empty array
* (has length {@code 0})
*
* @see ProcessBuilder
*/
@ -490,9 +488,9 @@ public class Runtime {
* with the specified environment.
*
* <p>This is a convenience method. An invocation of the form
* <tt>exec(cmdarray, envp)</tt>
* {@code exec(cmdarray, envp)}
* behaves in exactly the same way as the invocation
* <tt>{@link #exec(String[], String[], File) exec}(cmdarray, envp, null)</tt>.
* {@link #exec(String[], String[], File) exec}{@code (cmdarray, envp, null)}.
*
* @param cmdarray array containing the command to call and
* its arguments.
@ -500,7 +498,7 @@ public class Runtime {
* @param envp array of strings, each element of which
* has environment variable settings in the format
* <i>name</i>=<i>value</i>, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the environment of the current process.
*
* @return A new {@link Process} object for managing the subprocess
@ -514,13 +512,13 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>cmdarray</code> is <code>null</code>,
* or one of the elements of <code>cmdarray</code> is <code>null</code>,
* or one of the elements of <code>envp</code> is <code>null</code>
* If {@code cmdarray} is {@code null},
* or one of the elements of {@code cmdarray} is {@code null},
* or one of the elements of {@code envp} is {@code null}
*
* @throws IndexOutOfBoundsException
* If <code>cmdarray</code> is an empty array
* (has length <code>0</code>)
* If {@code cmdarray} is an empty array
* (has length {@code 0})
*
* @see ProcessBuilder
*/
@ -533,17 +531,17 @@ public class Runtime {
* Executes the specified command and arguments in a separate process with
* the specified environment and working directory.
*
* <p>Given an array of strings <code>cmdarray</code>, representing the
* tokens of a command line, and an array of strings <code>envp</code>,
* <p>Given an array of strings {@code cmdarray}, representing the
* tokens of a command line, and an array of strings {@code envp},
* representing "environment" variable settings, this method creates
* a new process in which to execute the specified command.
*
* <p>This method checks that <code>cmdarray</code> is a valid operating
* <p>This method checks that {@code cmdarray} is a valid operating
* system command. Which commands are valid is system-dependent,
* but at the very least the command must be a non-empty list of
* non-null strings.
*
* <p>If <tt>envp</tt> is <tt>null</tt>, the subprocess inherits the
* <p>If {@code envp} is {@code null}, the subprocess inherits the
* environment settings of the current process.
*
* <p>A minimal set of system dependent environment variables may
@ -554,14 +552,14 @@ public class Runtime {
* <p>{@link ProcessBuilder#start()} is now the preferred way to
* start a process with a modified environment.
*
* <p>The working directory of the new subprocess is specified by <tt>dir</tt>.
* If <tt>dir</tt> is <tt>null</tt>, the subprocess inherits the
* <p>The working directory of the new subprocess is specified by {@code dir}.
* If {@code dir} is {@code null}, the subprocess inherits the
* current working directory of the current process.
*
* <p>If a security manager exists, its
* {@link SecurityManager#checkExec checkExec}
* method is invoked with the first component of the array
* <code>cmdarray</code> as its argument. This may result in a
* {@code cmdarray} as its argument. This may result in a
* {@link SecurityException} being thrown.
*
* <p>Starting an operating system process is highly system-dependent.
@ -586,11 +584,11 @@ public class Runtime {
* @param envp array of strings, each element of which
* has environment variable settings in the format
* <i>name</i>=<i>value</i>, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the environment of the current process.
*
* @param dir the working directory of the subprocess, or
* <tt>null</tt> if the subprocess should inherit
* {@code null} if the subprocess should inherit
* the working directory of the current process.
*
* @return A new {@link Process} object for managing the subprocess
@ -607,13 +605,13 @@ public class Runtime {
* If an I/O error occurs
*
* @throws NullPointerException
* If <code>cmdarray</code> is <code>null</code>,
* or one of the elements of <code>cmdarray</code> is <code>null</code>,
* or one of the elements of <code>envp</code> is <code>null</code>
* If {@code cmdarray} is {@code null},
* or one of the elements of {@code cmdarray} is {@code null},
* or one of the elements of {@code envp} is {@code null}
*
* @throws IndexOutOfBoundsException
* If <code>cmdarray</code> is an empty array
* (has length <code>0</code>)
* If {@code cmdarray} is an empty array
* (has length {@code 0})
*
* @see ProcessBuilder
* @since 1.3
@ -643,8 +641,8 @@ public class Runtime {
/**
* Returns the amount of free memory in the Java Virtual Machine.
* Calling the
* <code>gc</code> method may result in increasing the value returned
* by <code>freeMemory.</code>
* {@code gc} method may result in increasing the value returned
* by {@code freeMemory.}
*
* @return an approximation to the total amount of memory currently
* available for future allocated objects, measured in bytes.
@ -665,9 +663,9 @@ public class Runtime {
public native long totalMemory();
/**
* Returns the maximum amount of memory that the Java virtual machine will
* attempt to use. If there is no inherent limit then the value {@link
* java.lang.Long#MAX_VALUE} will be returned.
* Returns the maximum amount of memory that the Java virtual machine
* will attempt to use. If there is no inherent limit then the value
* {@link java.lang.Long#MAX_VALUE} will be returned.
*
* @return the maximum amount of memory that the virtual machine will
* attempt to use, measured in bytes
@ -683,10 +681,10 @@ public class Runtime {
* returns from the method call, the virtual machine has made
* its best effort to recycle all discarded objects.
* <p>
* The name <code>gc</code> stands for "garbage
* The name {@code gc} stands for "garbage
* collector". The virtual machine performs this recycling
* process automatically as needed, in a separate thread, even if the
* <code>gc</code> method is not invoked explicitly.
* {@code gc} method is not invoked explicitly.
* <p>
* The method {@link System#gc()} is the conventional and convenient
* means of invoking this method.
@ -699,15 +697,15 @@ public class Runtime {
/**
* Runs the finalization methods of any objects pending finalization.
* Calling this method suggests that the Java virtual machine expend
* effort toward running the <code>finalize</code> methods of objects
* that have been found to be discarded but whose <code>finalize</code>
* effort toward running the {@code finalize} methods of objects
* that have been found to be discarded but whose {@code finalize}
* methods have not yet been run. When control returns from the
* method call, the virtual machine has made a best effort to
* complete all outstanding finalizations.
* <p>
* The virtual machine performs the finalization process
* automatically as needed, in a separate thread, if the
* <code>runFinalization</code> method is not invoked explicitly.
* {@code runFinalization} method is not invoked explicitly.
* <p>
* The method {@link System#runFinalization()} is the conventional
* and convenient means of invoking this method.
@ -720,7 +718,7 @@ public class Runtime {
/**
* Enables/Disables tracing of instructions.
* If the <code>boolean</code> argument is <code>true</code>, this
* If the {@code boolean} argument is {@code true}, this
* method suggests that the Java virtual machine emit debugging
* information for each instruction in the virtual machine as it
* is executed. The format of this information, and the file or other
@ -729,18 +727,18 @@ public class Runtime {
* this feature. The destination of the trace output is system
* dependent.
* <p>
* If the <code>boolean</code> argument is <code>false</code>, this
* If the {@code boolean} argument is {@code false}, this
* method causes the virtual machine to stop performing the
* detailed instruction trace it is performing.
*
* @param on <code>true</code> to enable instruction tracing;
* <code>false</code> to disable this feature.
* @param on {@code true} to enable instruction tracing;
* {@code false} to disable this feature.
*/
public void traceInstructions(boolean on) { }
/**
* Enables/Disables tracing of method calls.
* If the <code>boolean</code> argument is <code>true</code>, this
* If the {@code boolean} argument is {@code true}, this
* method suggests that the Java virtual machine emit debugging
* information for each method in the virtual machine as it is
* called. The format of this information, and the file or other output
@ -751,8 +749,8 @@ public class Runtime {
* Calling this method with argument false suggests that the
* virtual machine cease emitting per-call debugging information.
*
* @param on <code>true</code> to enable instruction tracing;
* <code>false</code> to disable this feature.
* @param on {@code true} to enable instruction tracing;
* {@code false} to disable this feature.
*/
public void traceMethodCalls(boolean on) { }
@ -760,7 +758,7 @@ public class Runtime {
* Loads the native library specified by the filename argument. The filename
* argument must be an absolute path name.
* (for example
* <code>Runtime.getRuntime().load("/home/avh/lib/libX11.so");</code>).
* {@code Runtime.getRuntime().load("/home/avh/lib/libX11.so");}).
*
* If the filename argument, when stripped of any platform-specific library
* prefix, path, and file extension, indicates a library whose name is,
@ -773,8 +771,8 @@ public class Runtime {
* Otherwise, the filename argument is mapped to a native library image in
* an implementation-dependent manner.
* <p>
* First, if there is a security manager, its <code>checkLink</code>
* method is called with the <code>filename</code> as its argument.
* First, if there is a security manager, its {@code checkLink}
* method is called with the {@code filename} as its argument.
* This may result in a security exception.
* <p>
* This is similar to the method {@link #loadLibrary(String)}, but it
@ -786,14 +784,14 @@ public class Runtime {
*
* @param filename the file to load.
* @exception SecurityException if a security manager exists and its
* <code>checkLink</code> method doesn't allow
* {@code checkLink} method doesn't allow
* loading of the specified dynamic library
* @exception UnsatisfiedLinkError if either the filename is not an
* absolute path name, the native library is not statically
* linked with the VM, or the library cannot be mapped to
* a native library image by the host system.
* @exception NullPointerException if <code>filename</code> is
* <code>null</code>
* @exception NullPointerException if {@code filename} is
* {@code null}
* @see java.lang.Runtime#getRuntime()
* @see java.lang.SecurityException
* @see java.lang.SecurityManager#checkLink(java.lang.String)
@ -816,26 +814,26 @@ public class Runtime {
}
/**
* Loads the native library specified by the <code>libname</code>
* argument. The <code>libname</code> argument must not contain any platform
* Loads the native library specified by the {@code libname}
* argument. The {@code libname} argument must not contain any platform
* specific prefix, file extension or path. If a native library
* called <code>libname</code> is statically linked with the VM, then the
* JNI_OnLoad_<code>libname</code> function exported by the library is invoked.
* called {@code libname} is statically linked with the VM, then the
* JNI_OnLoad_{@code libname} function exported by the library is invoked.
* See the JNI Specification for more details.
*
* Otherwise, the libname argument is loaded from a system library
* location and mapped to a native library image in an implementation-
* dependent manner.
* <p>
* First, if there is a security manager, its <code>checkLink</code>
* method is called with the <code>libname</code> as its argument.
* First, if there is a security manager, its {@code checkLink}
* method is called with the {@code libname} as its argument.
* This may result in a security exception.
* <p>
* The method {@link System#loadLibrary(String)} is the conventional
* and convenient means of invoking this method. If native
* methods are to be used in the implementation of a class, a standard
* strategy is to put the native code in a library file (call it
* <code>LibFile</code>) and then to put a static initializer:
* {@code LibFile}) and then to put a static initializer:
* <blockquote><pre>
* static { System.loadLibrary("LibFile"); }
* </pre></blockquote>
@ -848,14 +846,14 @@ public class Runtime {
*
* @param libname the name of the library.
* @exception SecurityException if a security manager exists and its
* <code>checkLink</code> method doesn't allow
* {@code checkLink} method doesn't allow
* loading of the specified dynamic library
* @exception UnsatisfiedLinkError if either the libname argument
* contains a file path, the native library is not statically
* linked with the VM, or the library cannot be mapped to a
* native library image by the host system.
* @exception NullPointerException if <code>libname</code> is
* <code>null</code>
* @exception NullPointerException if {@code libname} is
* {@code null}
* @see java.lang.SecurityException
* @see java.lang.SecurityManager#checkLink(java.lang.String)
*/
@ -878,7 +876,7 @@ public class Runtime {
/**
* Creates a localized version of an input stream. This method takes
* an <code>InputStream</code> and returns an <code>InputStream</code>
* an {@code InputStream} and returns an {@code InputStream}
* equivalent to the argument in all respects except that it is
* localized: as characters in the local character set are read from
* the stream, they are automatically converted from the local
@ -894,7 +892,7 @@ public class Runtime {
* @see java.io.InputStreamReader#InputStreamReader(java.io.InputStream)
* @deprecated As of JDK&nbsp;1.1, the preferred way to translate a byte
* stream in the local encoding into a character stream in Unicode is via
* the <code>InputStreamReader</code> and <code>BufferedReader</code>
* the {@code InputStreamReader} and {@code BufferedReader}
* classes.
*/
@Deprecated
@ -904,8 +902,8 @@ public class Runtime {
/**
* Creates a localized version of an output stream. This method
* takes an <code>OutputStream</code> and returns an
* <code>OutputStream</code> equivalent to the argument in all respects
* takes an {@code OutputStream} and returns an
* {@code OutputStream} equivalent to the argument in all respects
* except that it is localized: as Unicode characters are written to
* the stream, they are automatically converted to the local
* character set.
@ -915,8 +913,8 @@ public class Runtime {
*
* @deprecated As of JDK&nbsp;1.1, the preferred way to translate a
* Unicode character stream into a byte stream in the local encoding is via
* the <code>OutputStreamWriter</code>, <code>BufferedWriter</code>, and
* <code>PrintWriter</code> classes.
* the {@code OutputStreamWriter}, {@code BufferedWriter}, and
* {@code PrintWriter} classes.
*
* @param out OutputStream to localize
* @return a localized output stream

View File

@ -45,7 +45,7 @@ public class AtomicMoveNotSupportedException
* @param target
* a string identifying the target file or {@code null} if not known
* @param reason
* a reason message with additional information
* a reason message with additional information or {@code null}
*/
public AtomicMoveNotSupportedException(String source,
String target,

View File

@ -53,9 +53,9 @@ import sun.util.calendar.ZoneInfo;
* ------------------------------------------------------
* }</pre>
*
* <p><code>ERA</code> value 0 specifies the years before Meiji and
* the Gregorian year values are used. Unlike {@link
* GregorianCalendar}, the Julian to Gregorian transition is not
* <p>{@code ERA} value 0 specifies the years before Meiji and
* the Gregorian year values are used. Unlike
* {@link GregorianCalendar}, the Julian to Gregorian transition is not
* supported because it doesn't make any sense to the Japanese
* calendar systems used before Meiji. To represent the years before
* Gregorian year 1, 0 and negative values are used. The Japanese
@ -66,7 +66,7 @@ import sun.util.calendar.ZoneInfo;
* <p>A new era can be specified using property
* jdk.calendar.japanese.supplemental.era. The new era is added to the
* predefined eras. The syntax of the property is as follows.
* <p><pre>
* <pre>
* {@code name=<name>,abbr=<abbr>,since=<time['u']>}
* </pre>
* where
@ -83,7 +83,7 @@ import sun.util.calendar.ZoneInfo;
* ignored.
*
* <p>The following is an example of the property usage.
* <p><pre>
* <pre>
* java -Djdk.calendar.japanese.supplemental.era="name=NewEra,abbr=N,since=253374307200000"
* </pre>
* The property specifies an era change to NewEra at 9999-02-11T00:00:00 local time.
@ -315,7 +315,7 @@ class JapaneseImperialCalendar extends Calendar {
private transient int[] originalFields;
/**
* Constructs a <code>JapaneseImperialCalendar</code> based on the current time
* Constructs a {@code JapaneseImperialCalendar} based on the current time
* in the given time zone with the given locale.
*
* @param zone the given time zone.
@ -351,16 +351,16 @@ class JapaneseImperialCalendar extends Calendar {
}
/**
* Compares this <code>JapaneseImperialCalendar</code> to the specified
* <code>Object</code>. The result is <code>true</code> if and
* only if the argument is a <code>JapaneseImperialCalendar</code> object
* Compares this {@code JapaneseImperialCalendar} to the specified
* {@code Object}. The result is {@code true} if and
* only if the argument is a {@code JapaneseImperialCalendar} object
* that represents the same time value (millisecond offset from
* the <a href="Calendar.html#Epoch">Epoch</a>) under the same
* <code>Calendar</code> parameters.
* {@code Calendar} parameters.
*
* @param obj the object to compare with.
* @return <code>true</code> if this object is equal to <code>obj</code>;
* <code>false</code> otherwise.
* @return {@code true} if this object is equal to {@code obj};
* {@code false} otherwise.
* @see Calendar#compareTo(Calendar)
*/
@Override
@ -371,7 +371,7 @@ class JapaneseImperialCalendar extends Calendar {
/**
* Generates the hash code for this
* <code>JapaneseImperialCalendar</code> object.
* {@code JapaneseImperialCalendar} object.
*/
@Override
public int hashCode() {
@ -382,27 +382,27 @@ class JapaneseImperialCalendar extends Calendar {
* Adds the specified (signed) amount of time to the given calendar field,
* based on the calendar's rules.
*
* <p><em>Add rule 1</em>. The value of <code>field</code>
* after the call minus the value of <code>field</code> before the
* call is <code>amount</code>, modulo any overflow that has occurred in
* <code>field</code>. Overflow occurs when a field value exceeds its
* <p><em>Add rule 1</em>. The value of {@code field}
* after the call minus the value of {@code field} before the
* call is {@code amount}, modulo any overflow that has occurred in
* {@code field}. Overflow occurs when a field value exceeds its
* range and, as a result, the next larger field is incremented or
* decremented and the field value is adjusted back into its range.</p>
*
* <p><em>Add rule 2</em>. If a smaller field is expected to be
* invariant, but it is impossible for it to be equal to its
* prior value because of changes in its minimum or maximum after
* <code>field</code> is changed, then its value is adjusted to be as close
* {@code field} is changed, then its value is adjusted to be as close
* as possible to its expected value. A smaller field represents a
* smaller unit of time. <code>HOUR</code> is a smaller field than
* <code>DAY_OF_MONTH</code>. No adjustment is made to smaller fields
* smaller unit of time. {@code HOUR} is a smaller field than
* {@code DAY_OF_MONTH}. No adjustment is made to smaller fields
* that are not expected to be invariant. The calendar system
* determines what fields are expected to be invariant.</p>
*
* @param field the calendar field.
* @param amount the amount of date or time to be added to the field.
* @exception IllegalArgumentException if <code>field</code> is
* <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or unknown,
* @exception IllegalArgumentException if {@code field} is
* {@code ZONE_OFFSET}, {@code DST_OFFSET}, or unknown,
* or if any calendar fields have out-of-range values in
* non-lenient mode.
*/
@ -548,12 +548,12 @@ class JapaneseImperialCalendar extends Calendar {
* <p>This method calls {@link #complete()} before adding the
* amount so that all the calendar fields are normalized. If there
* is any calendar field having an out-of-range value in non-lenient mode, then an
* <code>IllegalArgumentException</code> is thrown.
* {@code IllegalArgumentException} is thrown.
*
* @param field the calendar field.
* @param amount the signed amount to add to <code>field</code>.
* @exception IllegalArgumentException if <code>field</code> is
* <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or unknown,
* @param amount the signed amount to add to {@code field}.
* @exception IllegalArgumentException if {@code field} is
* {@code ZONE_OFFSET}, {@code DST_OFFSET}, or unknown,
* or if any calendar fields have out-of-range values in
* non-lenient mode.
* @see #roll(int,boolean)
@ -1055,9 +1055,9 @@ class JapaneseImperialCalendar extends Calendar {
/**
* Returns the minimum value for the given calendar field of this
* <code>Calendar</code> instance. The minimum value is
* defined as the smallest value returned by the {@link
* Calendar#get(int) get} method for any possible time value,
* {@code Calendar} instance. The minimum value is
* defined as the smallest value returned by the
* {@link Calendar#get(int) get} method for any possible time value,
* taking into consideration the current values of the
* {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
* {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
@ -1077,9 +1077,9 @@ class JapaneseImperialCalendar extends Calendar {
/**
* Returns the maximum value for the given calendar field of this
* <code>GregorianCalendar</code> instance. The maximum value is
* defined as the largest value returned by the {@link
* Calendar#get(int) get} method for any possible time value,
* {@code GregorianCalendar} instance. The maximum value is
* defined as the largest value returned by the
* {@link Calendar#get(int) get} method for any possible time value,
* taking into consideration the current values of the
* {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
* {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
@ -1108,7 +1108,7 @@ class JapaneseImperialCalendar extends Calendar {
/**
* Returns the highest minimum value for the given calendar field
* of this <code>GregorianCalendar</code> instance. The highest
* of this {@code GregorianCalendar} instance. The highest
* minimum value is defined as the largest value returned by
* {@link #getActualMinimum(int)} for any possible time value,
* taking into consideration the current values of the
@ -1130,7 +1130,7 @@ class JapaneseImperialCalendar extends Calendar {
/**
* Returns the lowest maximum value for the given calendar field
* of this <code>GregorianCalendar</code> instance. The lowest
* of this {@code GregorianCalendar} instance. The lowest
* maximum value is defined as the smallest value returned by
* {@link #getActualMaximum(int)} for any possible time value,
* taking into consideration the current values of the
@ -1166,7 +1166,7 @@ class JapaneseImperialCalendar extends Calendar {
*
* @param field the calendar field
* @return the minimum of the given field for the time value of
* this <code>JapaneseImperialCalendar</code>
* this {@code JapaneseImperialCalendar}
* @see #getMinimum(int)
* @see #getMaximum(int)
* @see #getGreatestMinimum(int)
@ -1269,13 +1269,13 @@ class JapaneseImperialCalendar extends Calendar {
* and
* {@link Calendar#getTimeZone() getTimeZone} methods.
* For example, if the date of this instance is Heisei 16February 1,
* the actual maximum value of the <code>DAY_OF_MONTH</code> field
* the actual maximum value of the {@code DAY_OF_MONTH} field
* is 29 because Heisei 16 is a leap year, and if the date of this
* instance is Heisei 17 February 1, it's 28.
*
* @param field the calendar field
* @return the maximum of the given field for the time value of
* this <code>JapaneseImperialCalendar</code>
* this {@code JapaneseImperialCalendar}
* @see #getMinimum(int)
* @see #getMaximum(int)
* @see #getGreatestMinimum(int)
@ -1558,7 +1558,7 @@ class JapaneseImperialCalendar extends Calendar {
* href="Calendar.html#Epoch">Epoch</a>) to calendar field values.
* The time is <em>not</em>
* recomputed first; to recompute the time, then the fields, call the
* <code>complete</code> method.
* {@code complete} method.
*
* @see Calendar#complete
*/

View File

@ -33,7 +33,7 @@ import java.security.BasicPermission;
* name, but no actions list. Callers either possess the permission or not.
* <p>
* The following targets are defined:
* <p>
*
* <table border=1 cellpadding=5 summary="permission target name,
* what the target allows,and associated risks">
* <tr>

View File

@ -93,7 +93,7 @@ import javax.management.DynamicMBean;
* returns the diagnostic command description
* (the same as the one return in the 'help' command)</li>
* <li>{@link javax.management.MBeanOperationInfo#getImpact() getImpact()}
* returns <code>ACTION_INFO</code></li>
* returns {@code ACTION_INFO}</li>
* <li>{@link javax.management.MBeanOperationInfo#getReturnType() getReturnType()}
* returns {@code java.lang.String}</li>
* <li>{@link javax.management.MBeanOperationInfo#getDescriptor() getDescriptor()}
@ -105,7 +105,6 @@ import javax.management.DynamicMBean;
* meta-data for a JMX element. A field is a name and an associated value.
* The additional meta-data provided for an operation associated with a
* diagnostic command are described in the table below:
* <p>
*
* <table border="1" cellpadding="5">
* <tr>
@ -161,7 +160,6 @@ import javax.management.DynamicMBean;
* arguments supported by the diagnostic command (see below)</td>
* </tr>
* </table>
* <p>
*
* <p>The description of parameters (options or arguments) of a diagnostic
* command is provided within a Descriptor instance. In this Descriptor,

View File

@ -41,14 +41,14 @@ import sun.management.GarbageCollectionNotifInfoCompositeData;
* when the Java virtual machine completes a garbage collection action
* The notification emitted will contain the garbage collection notification
* information about the status of the memory:
* <u1>
* <ul>
* <li>The name of the garbage collector used to perform the collection.</li>
* <li>The action performed by the garbage collector.</li>
* <li>The cause of the garbage collection action.</li>
* <li>A {@link GcInfo} object containing some statistics about the GC cycle
(start time, end time) and the memory usage before and after
the GC cycle.</li>
* </u1>
* </ul>
*
* <p>
* A {@link CompositeData CompositeData} representing
@ -81,7 +81,7 @@ import sun.management.GarbageCollectionNotifInfoCompositeData;
* <li>A {@linkplain #GARBAGE_COLLECTION_NOTIFICATION garbage collection notification}.
* <br>Used by every notification emitted by the garbage collector, the details about
* the notification are provided in the {@linkplain #getGcAction action} String
* <p></li>
* </li>
* </ul>
**/

View File

@ -52,13 +52,13 @@ import sun.management.GcInfoBuilder;
* </blockquote>
*
* <p>
* <tt>GcInfo</tt> is a {@link CompositeData CompositeData}
* {@code GcInfo} is a {@link CompositeData CompositeData}
* The GC-specific attributes can be obtained via the CompositeData
* interface. This is a historical relic, and other classes should
* not copy this pattern. Use {@link CompositeDataView} instead.
*
* <h4>MXBean Mapping</h4>
* <tt>GcInfo</tt> is mapped to a {@link CompositeData CompositeData}
* {@code GcInfo} is mapped to a {@link CompositeData CompositeData}
* with attributes as specified in the {@link #from from} method.
*
* @author Mandy Chung
@ -152,11 +152,11 @@ public class GcInfo implements CompositeData, CompositeDataView {
* Returns the memory usage of all memory pools
* at the beginning of this GC.
* This method returns
* a <tt>Map</tt> of the name of a memory pool
* a {@code Map} of the name of a memory pool
* to the memory usage of the corresponding
* memory pool before GC starts.
*
* @return a <tt>Map</tt> of memory pool names to the memory
* @return a {@code Map} of memory pool names to the memory
* usage of a memory pool before GC starts.
*/
public Map<String, MemoryUsage> getMemoryUsageBeforeGc() {
@ -167,11 +167,11 @@ public class GcInfo implements CompositeData, CompositeDataView {
* Returns the memory usage of all memory pools
* at the end of this GC.
* This method returns
* a <tt>Map</tt> of the name of a memory pool
* a {@code Map} of the name of a memory pool
* to the memory usage of the corresponding
* memory pool when GC finishes.
*
* @return a <tt>Map</tt> of memory pool names to the memory
* @return a {@code Map} of memory pool names to the memory
* usage of a memory pool when GC finishes.
*/
public Map<String, MemoryUsage> getMemoryUsageAfterGc() {
@ -179,12 +179,11 @@ public class GcInfo implements CompositeData, CompositeDataView {
}
/**
* Returns a <tt>GcInfo</tt> object represented by the
* given <tt>CompositeData</tt>. The given
* <tt>CompositeData</tt> must contain
* Returns a {@code GcInfo} object represented by the
* given {@code CompositeData}. The given
* {@code CompositeData} must contain
* all the following attributes:
*
* <p>
* <blockquote>
* <table border>
* <tr>
@ -193,33 +192,33 @@ public class GcInfo implements CompositeData, CompositeDataView {
* </tr>
* <tr>
* <td>index</td>
* <td><tt>java.lang.Long</tt></td>
* <td>{@code java.lang.Long}</td>
* </tr>
* <tr>
* <td>startTime</td>
* <td><tt>java.lang.Long</tt></td>
* <td>{@code java.lang.Long}</td>
* </tr>
* <tr>
* <td>endTime</td>
* <td><tt>java.lang.Long</tt></td>
* <td>{@code java.lang.Long}</td>
* </tr>
* <tr>
* <td>memoryUsageBeforeGc</td>
* <td><tt>javax.management.openmbean.TabularData</tt></td>
* <td>{@code javax.management.openmbean.TabularData}</td>
* </tr>
* <tr>
* <td>memoryUsageAfterGc</td>
* <td><tt>javax.management.openmbean.TabularData</tt></td>
* <td>{@code javax.management.openmbean.TabularData}</td>
* </tr>
* </table>
* </blockquote>
*
* @throws IllegalArgumentException if <tt>cd</tt> does not
* represent a <tt>GcInfo</tt> object with the attributes
* @throws IllegalArgumentException if {@code cd} does not
* represent a {@code GcInfo} object with the attributes
* described above.
*
* @return a <tt>GcInfo</tt> object represented by <tt>cd</tt>
* if <tt>cd</tt> is not <tt>null</tt>; <tt>null</tt> otherwise.
* @return a {@code GcInfo} object represented by {@code cd}
* if {@code cd} is not {@code null}; {@code null} otherwise.
*/
public static GcInfo from(CompositeData cd) {
if (cd == null) {
@ -272,7 +271,7 @@ public class GcInfo implements CompositeData, CompositeDataView {
}
/**
* <p>Return the {@code CompositeData} representation of this
* Return the {@code CompositeData} representation of this
* {@code GcInfo}, including any GC-specific attributes. The
* returned value will have at least all the attributes described
* in the {@link #from(CompositeData) from} method, plus optionally

View File

@ -42,10 +42,10 @@ import javax.management.openmbean.CompositeData;
* be set dynamically via a management interface after
* the VM was started.
*
* A <tt>VMOption</tt> contains the value of a VM option
* and the origin of that value at the time this <tt>VMOption</tt>
* A {@code VMOption} contains the value of a VM option
* and the origin of that value at the time this {@code VMOption}
* object was constructed. The value of the VM option
* may be changed after the <tt>VMOption</tt> object was constructed,
* may be changed after the {@code VMOption} object was constructed,
*
* @see <a href="{@docRoot}/../../../../technotes/guides/vm/index.html">
* Java Virtual Machine</a>
@ -108,15 +108,15 @@ public class VMOption {
}
/**
* Constructs a <tt>VMOption</tt>.
* Constructs a {@code VMOption}.
*
* @param name Name of a VM option.
* @param value Value of a VM option.
* @param writeable <tt>true</tt> if a VM option can be set dynamically,
* or <tt>false</tt> otherwise.
* @param writeable {@code true} if a VM option can be set dynamically,
* or {@code false} otherwise.
* @param origin where the value of a VM option came from.
*
* @throws NullPointerException if the name or value is <tt>null</tt>
* @throws NullPointerException if the name or value is {@code null}
*/
public VMOption(String name, String value, boolean writeable, Origin origin) {
this.name = name;
@ -126,7 +126,7 @@ public class VMOption {
}
/**
* Constructs a <tt>VMOption</tt> object from a
* Constructs a {@code VMOption} object from a
* {@link CompositeData CompositeData}.
*/
private VMOption(CompositeData cd) {
@ -150,10 +150,10 @@ public class VMOption {
/**
* Returns the value of this VM option at the time when
* this <tt>VMOption</tt> was created. The value could have been changed.
* this {@code VMOption} was created. The value could have been changed.
*
* @return the value of the VM option at the time when
* this <tt>VMOption</tt> was created.
* this {@code VMOption} was created.
*/
public String getValue() {
return value;
@ -174,7 +174,7 @@ public class VMOption {
* it can be set by the {@link HotSpotDiagnosticMXBean#setVMOption
* HotSpotDiagnosticMXBean.setVMOption} method.
*
* @return <tt>true</tt> if this VM option is writeable; <tt>false</tt>
* @return {@code true} if this VM option is writeable; {@code false}
* otherwise.
*/
public boolean isWriteable() {
@ -189,10 +189,10 @@ public class VMOption {
}
/**
* Returns a <tt>VMOption</tt> object represented by the
* given <tt>CompositeData</tt>. The given <tt>CompositeData</tt>
* Returns a {@code VMOption} object represented by the
* given {@code CompositeData}. The given {@code CompositeData}
* must contain the following attributes:
* <p>
*
* <blockquote>
* <table border>
* <tr>
@ -201,32 +201,32 @@ public class VMOption {
* </tr>
* <tr>
* <td>name</td>
* <td><tt>java.lang.String</tt></td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>value</td>
* <td><tt>java.lang.String</tt></td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>origin</td>
* <td><tt>java.lang.String</tt></td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>writeable</td>
* <td><tt>java.lang.Boolean</tt></td>
* <td>{@code java.lang.Boolean}</td>
* </tr>
* </table>
* </blockquote>
*
* @param cd <tt>CompositeData</tt> representing a <tt>VMOption</tt>
* @param cd {@code CompositeData} representing a {@code VMOption}
*
* @throws IllegalArgumentException if <tt>cd</tt> does not
* represent a <tt>VMOption</tt> with the attributes described
* @throws IllegalArgumentException if {@code cd} does not
* represent a {@code VMOption} with the attributes described
* above.
*
* @return a <tt>VMOption</tt> object represented by <tt>cd</tt>
* if <tt>cd</tt> is not <tt>null</tt>;
* <tt>null</tt> otherwise.
* @return a {@code VMOption} object represented by {@code cd}
* if {@code cd} is not {@code null};
* {@code null} otherwise.
*/
public static VMOption from(CompositeData cd) {
if (cd == null) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -78,10 +78,9 @@ import java.lang.Double;
* under which these calls cannot even enqueue the requested operation for
* later processing. Even under these circumstances it is generally better to
* simply ignore the invocation and return, rather than throwing an
* exception. Under these circumstances, however, all subsequent invocations
* of <tt>flush()</tt> and <tt>sync</tt> should return <tt>false</tt>, as
* returning <tt>true</tt> would imply that all previous operations had
* successfully been made permanent.
* exception. Under these circumstances, however, subsequently invoking
* <tt>flush()</tt> or <tt>sync</tt> would not imply that all previous
* operations had successfully been made permanent.
*
* <p>There is one circumstance under which <tt>putSpi, removeSpi and
* childSpi</tt> <i>should</i> throw an exception: if the caller lacks
@ -122,6 +121,13 @@ import java.lang.Double;
* @since 1.4
*/
public abstract class AbstractPreferences extends Preferences {
/**
* The code point U+0000, assigned to the null control character, is the
* only character encoded in Unicode and ISO/IEC 10646 that is always
* invalid in any XML 1.0 and 1.1 document.
*/
static final int CODE_POINT_U0000 = '\u0000';
/**
* Our name relative to parent.
*/
@ -234,6 +240,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt> or if <tt>value.length</tt> exceeds
* <tt>MAX_VALUE_LENGTH</tt>.
* @throws IllegalArgumentException if either key or value contain
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -244,6 +252,10 @@ public abstract class AbstractPreferences extends Preferences {
throw new IllegalArgumentException("Key too long: "+key);
if (value.length() > MAX_VALUE_LENGTH)
throw new IllegalArgumentException("Value too long: "+value);
if (key.indexOf(CODE_POINT_U0000) != -1)
throw new IllegalArgumentException("Key contains code point U+0000");
if (value.indexOf(CODE_POINT_U0000) != -1)
throw new IllegalArgumentException("Value contains code point U+0000");
synchronized(lock) {
if (removed)
@ -275,10 +287,14 @@ public abstract class AbstractPreferences extends Preferences {
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if key is <tt>null</tt>. (A
* <tt>null</tt> default <i>is</i> permitted.)
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public String get(String key, String def) {
if (key==null)
throw new NullPointerException("Null key");
if (key.indexOf(CODE_POINT_U0000) != -1)
throw new IllegalArgumentException("Key contains code point U+0000");
synchronized(lock) {
if (removed)
throw new IllegalStateException("Node has been removed.");
@ -306,10 +322,14 @@ public abstract class AbstractPreferences extends Preferences {
* @param key key whose mapping is to be removed from the preference node.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @throws NullPointerException {@inheritDoc}.
*/
public void remove(String key) {
Objects.requireNonNull(key, "Specified key cannot be null");
if (key.indexOf(CODE_POINT_U0000) != -1)
throw new IllegalArgumentException("Key contains code point U+0000");
synchronized(lock) {
if (removed)
throw new IllegalStateException("Node has been removed.");
@ -353,6 +373,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key is <tt>null</tt>.
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -381,6 +403,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public int getInt(String key, int def) {
int result = def;
@ -408,6 +432,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key is <tt>null</tt>.
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -436,6 +462,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public long getLong(String key, long def) {
long result = def;
@ -463,6 +491,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key is <tt>null</tt>.
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -494,6 +524,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public boolean getBoolean(String key, boolean def) {
boolean result = def;
@ -521,6 +553,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key is <tt>null</tt>.
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -549,6 +583,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public float getFloat(String key, float def) {
float result = def;
@ -576,6 +612,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key is <tt>null</tt>.
* @throws IllegalArgumentException if <tt>key.length()</tt> exceeds
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -604,6 +642,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public double getDouble(String key, double def) {
double result = def;
@ -627,6 +667,8 @@ public abstract class AbstractPreferences extends Preferences {
* @throws NullPointerException if key or value is <tt>null</tt>.
* @throws IllegalArgumentException if key.length() exceeds MAX_KEY_LENGTH
* or if value.length exceeds MAX_VALUE_LENGTH*3/4.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
*/
@ -650,6 +692,8 @@ public abstract class AbstractPreferences extends Preferences {
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>. (A
* <tt>null</tt> value for <tt>def</tt> <i>is</i> permitted.)
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public byte[] getByteArray(String key, byte[] def) {
byte[] result = def;

View File

@ -489,7 +489,7 @@ public abstract class Preferences {
* <tt>MAX_VALUE_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if either the key or the value contain
* @throws IllegalArgumentException if either key or value contain
* the null control character, code point U+0000.
*/
public abstract void put(String key, String value);
@ -514,6 +514,8 @@ public abstract class Preferences {
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>. (A
* <tt>null</tt> value for <tt>def</tt> <i>is</i> permitted.)
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public abstract String get(String key, String def);
@ -530,6 +532,8 @@ public abstract class Preferences {
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
*/
public abstract void remove(String key);
@ -566,6 +570,8 @@ public abstract class Preferences {
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getInt(String,int)
*/
public abstract void putInt(String key, int value);
@ -597,6 +603,8 @@ public abstract class Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #putInt(String,int)
* @see #get(String,String)
*/
@ -616,6 +624,8 @@ public abstract class Preferences {
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getLong(String,long)
*/
public abstract void putLong(String key, long value);
@ -647,6 +657,8 @@ public abstract class Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #putLong(String,long)
* @see #get(String,String)
*/
@ -666,6 +678,8 @@ public abstract class Preferences {
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getBoolean(String,boolean)
* @see #get(String,String)
*/
@ -702,6 +716,8 @@ public abstract class Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #get(String,String)
* @see #putBoolean(String,boolean)
*/
@ -721,6 +737,8 @@ public abstract class Preferences {
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getFloat(String,float)
*/
public abstract void putFloat(String key, float value);
@ -751,6 +769,8 @@ public abstract class Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #putFloat(String,float)
* @see #get(String,String)
*/
@ -770,6 +790,8 @@ public abstract class Preferences {
* <tt>MAX_KEY_LENGTH</tt>.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getDouble(String,double)
*/
public abstract void putDouble(String key, double value);
@ -800,6 +822,8 @@ public abstract class Preferences {
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>.
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #putDouble(String,double)
* @see #get(String,String)
*/
@ -825,6 +849,8 @@ public abstract class Preferences {
* or if value.length exceeds MAX_VALUE_LENGTH*3/4.
* @throws IllegalStateException if this node (or an ancestor) has been
* removed with the {@link #removeNode()} method.
* @throws IllegalArgumentException if key contains
* the null control character, code point U+0000.
* @see #getByteArray(String,byte[])
* @see #get(String,String)
*/
@ -864,6 +890,8 @@ public abstract class Preferences {
* removed with the {@link #removeNode()} method.
* @throws NullPointerException if <tt>key</tt> is <tt>null</tt>. (A
* <tt>null</tt> value for <tt>def</tt> <i>is</i> permitted.)
* @throws IllegalArgumentException if key contains the null control
* character, code point U+0000.
* @see #get(String,String)
* @see #putByteArray(String,byte[])
*/

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -49,13 +49,6 @@ import sun.util.logging.PlatformLogger;
*/
class FileSystemPreferences extends AbstractPreferences {
/**
* The code point U+0000, assigned to the null control character, is the
* only character encoded in Unicode and ISO/IEC 10646 that is always
* invalid in any XML 1.0 and 1.1 document.
*/
private static final String CODE_POINT_U0000 = String.valueOf('\u0000');
static {
PrivilegedAction<Void> load = () -> {
System.loadLibrary("prefs");
@ -532,11 +525,6 @@ class FileSystemPreferences extends AbstractPreferences {
}
protected void putSpi(String key, String value) {
if (key.indexOf(CODE_POINT_U0000) != -1) {
throw new IllegalArgumentException("Key contains code point U+0000");
} else if (value.indexOf(CODE_POINT_U0000) != -1) {
throw new IllegalArgumentException("Value contains code point U+0000");
}
initCacheIfNecessary();
changeLog.add(new Put(key, value));
prefsCache.put(key, value);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,8 +25,6 @@
package java.util.prefs;
import java.util.Map;
import java.util.TreeMap;
import java.util.StringTokenizer;
import java.io.ByteArrayOutputStream;
import java.security.AccessController;
@ -46,7 +44,7 @@ import sun.util.logging.PlatformLogger;
* @since 1.4
*/
class WindowsPreferences extends AbstractPreferences{
class WindowsPreferences extends AbstractPreferences {
static {
PrivilegedAction<Void> load = () -> {
@ -620,22 +618,22 @@ class WindowsPreferences extends AbstractPreferences{
* @see #getSpi(String)
*/
protected void putSpi(String javaName, String value) {
int nativeHandle = openKey(KEY_SET_VALUE);
if (nativeHandle == NULL_NATIVE_HANDLE) {
isBackingStoreAvailable = false;
return;
}
int result = WindowsRegSetValueEx1(nativeHandle,
toWindowsName(javaName), toWindowsValueString(value));
if (result != ERROR_SUCCESS) {
logger().warning("Could not assign value to key " +
byteArrayToString(toWindowsName(javaName))+ " at Windows registry node "
+ byteArrayToString(windowsAbsolutePath()) + " at root 0x"
+ Integer.toHexString(rootNativeHandle()) +
". Windows RegSetValueEx(...) returned error code " + result + ".");
isBackingStoreAvailable = false;
int nativeHandle = openKey(KEY_SET_VALUE);
if (nativeHandle == NULL_NATIVE_HANDLE) {
isBackingStoreAvailable = false;
return;
}
closeKey(nativeHandle);
int result = WindowsRegSetValueEx1(nativeHandle,
toWindowsName(javaName), toWindowsValueString(value));
if (result != ERROR_SUCCESS) {
logger().warning("Could not assign value to key " +
byteArrayToString(toWindowsName(javaName))+ " at Windows registry node "
+ byteArrayToString(windowsAbsolutePath()) + " at root 0x"
+ Integer.toHexString(rootNativeHandle()) +
". Windows RegSetValueEx(...) returned error code " + result + ".");
isBackingStoreAvailable = false;
}
closeKey(nativeHandle);
}
/**
@ -645,18 +643,18 @@ class WindowsPreferences extends AbstractPreferences{
* @see #putSpi(String, String)
*/
protected String getSpi(String javaName) {
int nativeHandle = openKey(KEY_QUERY_VALUE);
if (nativeHandle == NULL_NATIVE_HANDLE) {
return null;
}
Object resultObject = WindowsRegQueryValueEx(nativeHandle,
toWindowsName(javaName));
if (resultObject == null) {
int nativeHandle = openKey(KEY_QUERY_VALUE);
if (nativeHandle == NULL_NATIVE_HANDLE) {
return null;
}
Object resultObject = WindowsRegQueryValueEx(nativeHandle,
toWindowsName(javaName));
if (resultObject == null) {
closeKey(nativeHandle);
return null;
}
closeKey(nativeHandle);
return null;
}
closeKey(nativeHandle);
return toJavaValueString((byte[]) resultObject);
return toJavaValueString((byte[]) resultObject);
}
/**

View File

@ -46,27 +46,23 @@ The API is defined by classes in the package
<a href="CommandAPDU.html">CommandAPDU</a>,
<a href="ResponseAPDU.html">ResponseAPDU</a>
<p>
<dt>Factory to obtain implementations
<dd>
<a href="TerminalFactory.html">TerminalFactory</a>
<p>
<dt>Main classes for card and terminal functions
<dd>
<a href="CardTerminals.html">CardTerminals</a>,
<a href="CardTerminal.html">CardTerminal</a>,
<a href="CardTerminals.html">CardTerminals</a>,
<a href="CardTerminal.html">CardTerminal</a>,
<a href="Card.html">Card</a>,
<a href="CardChannel.html">CardChannel</a>
<p>
<dt>Supporting permission and exception classes
<dd>
<a href="CardPermission.html">CardPermission</a>,
<a href="CardException.html">CardException</a>,
<a href="CardPermission.html">CardPermission</a>,
<a href="CardException.html">CardException</a>,
<a href="CardNotPresentException.html">CardNotPresentException</a>
<p>
<dt>Service provider interface, not accessed directly by applications
<dd>
<a href="TerminalFactorySpi.html">TerminalFactorySpi</a>
@ -94,7 +90,6 @@ A simple example of using the API is:
card.disconnect(false);
</pre>
<P>
@since 1.6
@author Andreas Sterbenz
@author JSR 268 Expert Group

View File

@ -29,15 +29,15 @@ package com.sun.tools.attach;
* The exception thrown when an agent fails to initialize in the target
* Java virtual machine.
*
* <p> This exception is thrown by {@link
* com.sun.tools.attach.VirtualMachine#loadAgent VirtualMachine.loadAgent},
* <p> This exception is thrown by
* {@link com.sun.tools.attach.VirtualMachine#loadAgent VirtualMachine.loadAgent},
* {@link com.sun.tools.attach.VirtualMachine#loadAgentLibrary
* VirtualMachine.loadAgentLibrary}, {@link
* com.sun.tools.attach.VirtualMachine#loadAgentPath VirtualMachine.loadAgentPath}
* VirtualMachine.loadAgentLibrary},
* {@link com.sun.tools.attach.VirtualMachine#loadAgentPath VirtualMachine.loadAgentPath}
* methods if an agent, or agent library, cannot be initialized.
* When thrown by <tt>VirtualMachine.loadAgentLibrary</tt>, or
* <tt>VirtualMachine.loadAgentPath</tt> then the exception encapsulates
* the error returned by the agent's <code>Agent_OnAttach</code> function.
* When thrown by {@code VirtualMachine.loadAgentLibrary}, or
* {@code VirtualMachine.loadAgentPath} then the exception encapsulates
* the error returned by the agent's {@code Agent_OnAttach} function.
* This error code can be obtained by invoking the {@link #returnValue() returnValue} method.
*/
@jdk.Exported
@ -49,7 +49,7 @@ public class AgentInitializationException extends Exception {
private int returnValue;
/**
* Constructs an <code>AgentInitializationException</code> with
* Constructs an {@code AgentInitializationException} with
* no detail message.
*/
public AgentInitializationException() {
@ -58,7 +58,7 @@ public class AgentInitializationException extends Exception {
}
/**
* Constructs an <code>AgentInitializationException</code> with
* Constructs an {@code AgentInitializationException} with
* the specified detail message.
*
* @param s the detail message.
@ -69,9 +69,9 @@ public class AgentInitializationException extends Exception {
}
/**
* Constructs an <code>AgentInitializationException</code> with
* Constructs an {@code AgentInitializationException} with
* the specified detail message and the return value from the
* execution of the agent's <code>Agent_OnAttach</code> function.
* execution of the agent's {@code Agent_OnAttach} function.
*
* @param s the detail message.
* @param returnValue the return value
@ -83,8 +83,8 @@ public class AgentInitializationException extends Exception {
/**
* If the exception was created with the return value from the agent
* <code>Agent_OnAttach</code> function then this returns that value,
* otherwise returns <code>0</code>. </p>
* {@code Agent_OnAttach} function then this returns that value,
* otherwise returns {@code 0}.
*
* @return the return value
*/

View File

@ -41,7 +41,7 @@ import java.util.ServiceLoader;
*
* <p> An attach provider is a concrete subclass of this class that has a
* zero-argument constructor and implements the abstract methods specified
* below. </p>
* below.
*
* <p> An attach provider implementation is typically tied to a Java virtual
* machine implementation, version, or even mode of operation. That is, a specific
@ -51,7 +51,7 @@ import java.util.ServiceLoader;
* Sun's <i>HotSpot</i> virtual machine. In general, if an environment
* consists of Java virtual machines of different versions and from different
* vendors then there will be an attach provider implementation for each
* <i>family</i> of implementations or versions. </p>
* <i>family</i> of implementations or versions.
*
* <p> An attach provider is identified by its {@link #name <i>name</i>} and
* {@link #type <i>type</i>}. The <i>name</i> is typically, but not required to
@ -61,15 +61,15 @@ import java.util.ServiceLoader;
* implementation that uses the Doors inter-process communication mechanism
* might use the type <i>"doors"</i>. The purpose of the name and type is to
* identify providers in environments where there are multiple providers
* installed. </p>
* installed.
*
* <p> AttachProvider implementations are loaded and instantiated at the first
* invocation of the {@link #providers() providers} method. This method
* attempts to load all provider implementations that are installed on the
* platform. </p>
* platform.
*
* <p> All of the methods in this class are safe for use by multiple
* concurrent threads. </p>
* concurrent threads.
*
* @since 1.6
*/
@ -81,12 +81,12 @@ public abstract class AttachProvider {
private static List<AttachProvider> providers = null;
/**
* Initializes a new instance of this class. </p>
* Initializes a new instance of this class.
*
* @throws SecurityException
* If a security manager has been installed and it denies
* {@link com.sun.tools.attach.AttachPermission AttachPermission}
* <tt>("createAttachProvider")</tt>
* ("{@code createAttachProvider}")
*/
protected AttachProvider() {
SecurityManager sm = System.getSecurityManager();
@ -95,14 +95,14 @@ public abstract class AttachProvider {
}
/**
* Return this provider's name. </p>
* Return this provider's name.
*
* @return The name of this provider
*/
public abstract String name();
/**
* Return this provider's type. </p>
* Return this provider's type.
*
* @return The type of this provider
*/
@ -113,18 +113,18 @@ public abstract class AttachProvider {
*
* <p> A Java virtual machine is identified by an abstract identifier. The
* nature of this identifier is platform dependent but in many cases it will be the
* string representation of the process identifier (or pid). </p>
* string representation of the process identifier (or pid).
*
* <p> This method parses the identifier and maps the identifier to a Java
* virtual machine (in an implementation dependent manner). If the identifier
* cannot be parsed by the provider then an {@link
* com.sun.tools.attach.AttachNotSupportedException AttachNotSupportedException}
* cannot be parsed by the provider then an
* {@link com.sun.tools.attach.AttachNotSupportedException AttachNotSupportedException}
* is thrown. Once parsed this method attempts to attach to the Java virtual machine.
* If the provider detects that the identifier corresponds to a Java virtual machine
* that does not exist, or it corresponds to a Java virtual machine that does not support
* the attach mechanism implemented by this provider, or it detects that the
* Java virtual machine is a version to which this provider cannot attach, then
* an <code>AttachNotSupportedException</code> is thrown. </p>
* an {@code AttachNotSupportedException} is thrown.
*
* @param id
* The abstract identifier that identifies the Java virtual machine.
@ -134,7 +134,7 @@ public abstract class AttachProvider {
* @throws SecurityException
* If a security manager has been installed and it denies
* {@link com.sun.tools.attach.AttachPermission AttachPermission}
* <tt>("attachVirtualMachine")</tt>, or other permission
* ("{@code attachVirtualMachine}"), or other permission
* required by the implementation.
*
* @throws AttachNotSupportedException
@ -147,7 +147,7 @@ public abstract class AttachProvider {
* If some other I/O error occurs
*
* @throws NullPointerException
* If <code>id</code> is <code>null</code>
* If {@code id} is {@code null}
*/
public abstract VirtualMachine attachVirtualMachine(String id)
throws AttachNotSupportedException, IOException;
@ -155,10 +155,10 @@ public abstract class AttachProvider {
/**
* Attaches to a Java virtual machine.
*
* <p> A Java virtual machine can be described using a {@link
* com.sun.tools.attach.VirtualMachineDescriptor VirtualMachineDescriptor}.
* This method invokes the descriptor's {@link
* com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
* <p> A Java virtual machine can be described using a
* {@link com.sun.tools.attach.VirtualMachineDescriptor VirtualMachineDescriptor}.
* This method invokes the descriptor's
* {@link com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
* to check that it is equal to this provider. It then attempts to attach to the
* Java virtual machine.
*
@ -170,20 +170,20 @@ public abstract class AttachProvider {
* @throws SecurityException
* If a security manager has been installed and it denies
* {@link com.sun.tools.attach.AttachPermission AttachPermission}
* <tt>("attachVirtualMachine")</tt>, or other permission
* ("{@code attachVirtualMachine}"), or other permission
* required by the implementation.
*
* @throws AttachNotSupportedException
* If the descriptor's {@link
* com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
* returns a provider that is not this provider, or it does not correspond
* to a Java virtual machine to which this provider can attach.
* If the descriptor's
* {@link com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()}
* method returns a provider that is not this provider, or it does not
* correspond to a Java virtual machine to which this provider can attach.
*
* @throws IOException
* If some other I/O error occurs
*
* @throws NullPointerException
* If <code>vmd</code> is <code>null</code>
* If {@code vmd} is {@code null}
*/
public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd)
throws AttachNotSupportedException, IOException
@ -197,12 +197,13 @@ public abstract class AttachProvider {
/**
* Lists the Java virtual machines known to this provider.
*
* <p> This method returns a list of {@link
* com.sun.tools.attach.VirtualMachineDescriptor} elements. Each
* <code>VirtualMachineDescriptor</code> describes a Java virtual machine
* <p> This method returns a list of
* {@link com.sun.tools.attach.VirtualMachineDescriptor} elements. Each
* {@code VirtualMachineDescriptor} describes a Java virtual machine
* to which this provider can <i>potentially</i> attach. There isn't any
* guarantee that invoking {@link #attachVirtualMachine(VirtualMachineDescriptor)
* attachVirtualMachine} on each descriptor in the list will succeed.
* guarantee that invoking
* {@link #attachVirtualMachine(VirtualMachineDescriptor) attachVirtualMachine}
* on each descriptor in the list will succeed.
*
* @return The list of virtual machine descriptors which describe the
* Java virtual machines known to this provider (may be empty).
@ -216,31 +217,31 @@ public abstract class AttachProvider {
* <p> An AttachProvider is installed on the platform if:
*
* <ul>
* <li><p>It is installed in a JAR file that is visible to the defining
* <li>It is installed in a JAR file that is visible to the defining
* class loader of the AttachProvider type (usually, but not required
* to be, the {@link java.lang.ClassLoader#getSystemClassLoader system
* class loader}).</p></li>
* class loader}).</li>
*
* <li><p>The JAR file contains a provider configuration named
* <tt>com.sun.tools.attach.spi.AttachProvider</tt> in the resource directory
* <tt>META-INF/services</tt>. </p></li>
* <li>The JAR file contains a provider configuration named
* {@code com.sun.tools.attach.spi.AttachProvider} in the resource directory
* {@code META-INF/services}.</li>
*
* <li><p>The provider configuration file lists the full-qualified class
* name of the AttachProvider implementation. </p></li>
* <li>The provider configuration file lists the full-qualified class
* name of the AttachProvider implementation.</li>
* </ul>
*
* <p> The format of the provider configuration file is one fully-qualified
* class name per line. Space and tab characters surrounding each class name,
* as well as blank lines are ignored. The comment character is
* <tt>'#'</tt> (<tt>0x23</tt>), and on each line all characters following
* {@code '#'} ({@code 0x23}), and on each line all characters following
* the first comment character are ignored. The file must be encoded in
* UTF-8. </p>
* UTF-8.
*
* <p> AttachProvider implementations are loaded and instantiated
* (using the zero-arg constructor) at the first invocation of this method.
* The list returned by the first invocation of this method is the list
* of providers. Subsequent invocations of this method return a list of the same
* providers. The list is unmodifable.</p>
* providers. The list is unmodifable.
*
* @return A list of the installed attach providers.
*/

View File

@ -72,7 +72,7 @@ public abstract class Filter {
* exchange handler will not be invoked.
* @param exchange the HttpExchange
* @throws IOException let exceptions pass up the stack
* @throws NullPointerException if exchange is <code>null</code>
* @throws NullPointerException if exchange is {@code null}
*/
public void doFilter (HttpExchange exchange) throws IOException {
if (!iter.hasNext()) {
@ -86,14 +86,14 @@ public abstract class Filter {
/**
* Asks this filter to pre/post-process the given exchange. The filter
* can :-
* can:
* <ul><li>examine or modify the request headers</li>
* <li>filter the request body or the response body, by creating suitable
* filter streams and calling
* {@link HttpExchange#setStreams(InputStream,OutputStream)}</li>
* <li>set attribute Objects in the exchange, which other filters or the
* exchange handler can access.</li>
* <li>decide to either :-<ol>
* <li>decide to either<ol>
* <li>invoke the next filter in the chain, by calling
* {@link Filter.Chain#doFilter(HttpExchange)}</li>
* <li>terminate the chain of invocation, by <b>not</b> calling
@ -102,12 +102,13 @@ public abstract class Filter {
* filters in the Chain have been called, and the response headers can be
* examined or modified.</li>
* <li>if option 2. above taken, then this Filter must use the HttpExchange
* to send back an appropriate response</li></ul><p>
* @param exchange the <code>HttpExchange</code> to be filtered.
* to send back an appropriate response</li></ul>
*
* @param exchange the {@code HttpExchange} to be filtered.
* @param chain the Chain which allows the next filter to be invoked.
* @throws IOException may be thrown by any filter module, and if
* caught, must be rethrown again.
* @throws NullPointerException if either exchange or chain are <code>null</code>
* @throws NullPointerException if either exchange or chain are {@code null}
*/
public abstract void doFilter (HttpExchange exchange, Chain chain)
throws IOException;

View File

@ -29,18 +29,21 @@ import java.util.*;
/**
* HTTP request and response headers are represented by this class which implements
* the interface {@link java.util.Map}&lt;
* {@link java.lang.String},{@link java.util.List}&lt;{@link java.lang.String}&gt;&gt;.
* the interface
* {@link java.util.Map}{@literal <}{@link java.lang.String}, {@link java.util.List}
* {@literal <}{@link java.lang.String}{@literal >>}.
* The keys are case-insensitive Strings representing the header names and
* the value associated with each key is a {@link List}&lt;{@link String}&gt; with one
* the value associated with each key is
* a {@link List}{@literal <}{@link String}{@literal >} with one
* element for each occurrence of the header name in the request or response.
* <p>
* For example, if a response header instance contains one key "HeaderName" with two values "value1 and value2"
* For example, if a response header instance contains
* one key "HeaderName" with two values "value1 and value2"
* then this object is output as two header lines:
* <blockquote><pre>
* HeaderName: value1
* HeaderName: value2
* </blockquote></pre>
* </pre></blockquote>
* <p>
* All the normal {@link java.util.Map} methods are provided, but the following
* additional convenience methods are most likely to be used:

View File

@ -116,9 +116,9 @@ public abstract class HttpExchange {
public abstract HttpContext getHttpContext ();
/**
* Ends this exchange by doing the following in sequence:<p><ol>
* <li>close the request InputStream, if not already closed<p></li>
* <li>close the response OutputStream, if not already closed. </li>
* Ends this exchange by doing the following in sequence:<ol>
* <li>close the request InputStream, if not already closed;</li>
* <li>close the response OutputStream, if not already closed.</li>
* </ol>
*/
public abstract void close () ;
@ -163,9 +163,9 @@ public abstract class HttpExchange {
* and the numeric response code as specified in this method. The response body length is also specified
* as follows. If the response length parameter is greater than zero, this specifies an exact
* number of bytes to send and the application must send that exact amount of data.
* If the response length parameter is <code>zero</code>, then chunked transfer encoding is
* If the response length parameter is {@code zero}, then chunked transfer encoding is
* used and an arbitrary amount of data may be sent. The application terminates the
* response body by closing the OutputStream. If response length has the value <code>-1</code>
* response body by closing the OutputStream. If response length has the value {@code -1}
* then no response body is being sent.
* <p>
* If the content-length response header has not already been set then
@ -192,7 +192,7 @@ public abstract class HttpExchange {
/**
* Returns the response code, if it has already been set
* @return the response code, if available. <code>-1</code> if not available yet.
* @return the response code, if available. {@code -1} if not available yet.
*/
public abstract int getResponseCode ();
@ -219,7 +219,7 @@ public abstract class HttpExchange {
* available.
* @param name the name of the attribute to retrieve
* @return the attribute object, or null if it does not exist
* @throws NullPointerException if name is <code>null</code>
* @throws NullPointerException if name is {@code null}
*/
public abstract Object getAttribute (String name) ;
@ -231,9 +231,9 @@ public abstract class HttpExchange {
* Each Filter class will document the attributes which they make
* available.
* @param name the name to associate with the attribute value
* @param value the object to store as the attribute value. <code>null</code>
* @param value the object to store as the attribute value. {@code null}
* value is permitted.
* @throws NullPointerException if name is <code>null</code>
* @throws NullPointerException if name is {@code null}
*/
public abstract void setAttribute (String name, Object value) ;
@ -248,9 +248,9 @@ public abstract class HttpExchange {
* required to be) sub-classes of {@link java.io.FilterInputStream}
* and {@link java.io.FilterOutputStream}.
* @param i the filtered input stream to set as this object's inputstream,
* or <code>null</code> if no change.
* or {@code null} if no change.
* @param o the filtered output stream to set as this object's outputstream,
* or <code>null</code> if no change.
* or {@code null} if no change.
*/
public abstract void setStreams (InputStream i, OutputStream o);
@ -259,7 +259,7 @@ public abstract class HttpExchange {
* If an authenticator is set on the HttpContext that owns this exchange,
* then this method will return the {@link HttpPrincipal} that represents
* the authenticated user for this HttpExchange.
* @return the HttpPrincipal, or <code>null</code> if no authenticator is set.
* @return the HttpPrincipal, or {@code null} if no authenticator is set.
*/
public abstract HttpPrincipal getPrincipal ();
}

View File

@ -58,8 +58,8 @@ import com.sun.net.httpserver.spi.HttpServerProvider;
* whose path is the longest matching prefix of the request URI's path.
* Paths are matched literally, which means that the strings are compared
* case sensitively, and with no conversion to or from any encoded forms.
* For example. Given a HttpServer with the following HttpContexts configured.<p>
* <table >
* For example. Given a HttpServer with the following HttpContexts configured.
* <table>
* <tr><td><i>Context</i></td><td><i>Context path</i></td></tr>
* <tr><td>ctx1</td><td>"/"</td></tr>
* <tr><td>ctx2</td><td>"/apps/"</td></tr>
@ -67,7 +67,7 @@ import com.sun.net.httpserver.spi.HttpServerProvider;
* </table>
* <p>
* the following table shows some request URIs and which, if any context they would
* match with.<p>
* match with.
* <table>
* <tr><td><i>Request URI</i></td><td><i>Matches context</i></td></tr>
* <tr><td>"http://foo.com/apps/foo/bar"</td><td>ctx3</td></tr>
@ -181,7 +181,7 @@ public abstract class HttpServer {
* approximately <i>delay</i> seconds have elapsed (whichever happens
* sooner). Then, all open TCP connections are closed, the background
* thread created by start() exits, and the method returns.
* Once stopped, a HttpServer cannot be re-used. <p>
* Once stopped, a HttpServer cannot be re-used.
*
* @param delay the maximum time in seconds to wait until exchanges have finished.
* @throws IllegalArgumentException if delay is less than zero.

View File

@ -42,8 +42,8 @@ import javax.net.ssl.*;
* the default configuration.
* <p>
* The following <a name="example">example</a> shows how this may be done:
* <p>
* <pre><blockquote>
*
* <blockquote><pre>
* SSLContext sslContext = SSLContext.getInstance (....);
* HttpsServer server = HttpsServer.create();
*
@ -64,7 +64,7 @@ import javax.net.ssl.*;
* params.setSSLParameters(sslparams);
* }
* });
* </blockquote></pre>
* </pre></blockquote>
* @since 1.6
*/
@jdk.Exported
@ -102,7 +102,7 @@ public class HttpsConfigurator {
* <p>
* The default implementation of this method uses the
* SSLParameters returned from <p>
* <code>getSSLContext().getDefaultSSLParameters()</code>
* {@code getSSLContext().getDefaultSSLParameters()}
* <p>
* configure() may be overridden in order to modify this behavior.
* See, the example <a href="#example">above</a>.

View File

@ -58,7 +58,7 @@
server.createContext("/applications/myapp", new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
</blockquote></pre>
</pre></blockquote>
<p>The example above creates a simple HttpServer which uses the calling
application thread to invoke the handle() method for incoming http
requests directed to port 8000, and to the path /applications/myapp/.
@ -92,7 +92,7 @@
SSLContext ssl = SSLContext.getInstance("TLS");
ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
</blockquote></pre>
</pre></blockquote>
<p>
In the example above, a keystore file called "testkeys", created with the keytool utility
is used as a certificate store for client and server certificates.
@ -119,8 +119,8 @@
}
});
</blockquote></pre>
<p>
</pre></blockquote>
@since 1.6
*/
@jdk.Exported

View File

@ -28,19 +28,19 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents the name of the Windows NT domain into which the
* user authenticated. This will be a domain name if the user logged
* into a Windows NT domain, a workgroup name if the user logged into
* a workgroup, or a machine name if the user logged into a standalone
* configuration.
*
* <p> Principals such as this <code>NTDomainPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTDomainPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -56,14 +56,12 @@ public class NTDomainPrincipal implements Principal, java.io.Serializable {
private String name;
/**
* Create an <code>NTDomainPrincipal</code> with a Windows NT domain name.
* Create an {@code NTDomainPrincipal} with a Windows NT domain name.
*
* <p>
* @param name the Windows NT domain name for this user.
*
* @param name the Windows NT domain name for this user. <p>
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTDomainPrincipal(String name) {
if (name == null) {
@ -79,23 +77,19 @@ public class NTDomainPrincipal implements Principal, java.io.Serializable {
/**
* Return the Windows NT domain name for this
* <code>NTDomainPrincipal</code>.
*
* <p>
* {@code NTDomainPrincipal}.
*
* @return the Windows NT domain name for this
* <code>NTDomainPrincipal</code>
* {@code NTDomainPrincipal}
*/
public String getName() {
return name;
}
/**
* Return a string representation of this <code>NTDomainPrincipal</code>.
* Return a string representation of this {@code NTDomainPrincipal}.
*
* <p>
*
* @return a string representation of this <code>NTDomainPrincipal</code>.
* @return a string representation of this {@code NTDomainPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -107,18 +101,16 @@ public class NTDomainPrincipal implements Principal, java.io.Serializable {
}
/**
* Compares the specified Object with this <code>NTDomainPrincipal</code>
* Compares the specified Object with this {@code NTDomainPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTDomainPrincipal</code> and the two NTDomainPrincipals
* {@code NTDomainPrincipal} and the two NTDomainPrincipals
* have the same name.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTDomainPrincipal</code>.
* {@code NTDomainPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTDomainPrincipal</code>.
* {@code NTDomainPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -137,11 +129,9 @@ public class NTDomainPrincipal implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>NTDomainPrincipal</code>.
* Return a hash code for this {@code NTDomainPrincipal}.
*
* <p>
*
* @return a hash code for this <code>NTDomainPrincipal</code>.
* @return a hash code for this {@code NTDomainPrincipal}.
*/
public int hashCode() {
return this.getName().hashCode();

View File

@ -26,9 +26,8 @@
package com.sun.security.auth;
/**
* <p> This class abstracts an NT security token
* This class abstracts an NT security token
* and provides a mechanism to do same-process security impersonation.
*
*/
@jdk.Exported
@ -37,12 +36,9 @@ public class NTNumericCredential {
private long impersonationToken;
/**
* Create an <code>NTNumericCredential</code> with an integer value.
*
* <p>
*
* @param token the Windows NT security token for this user. <p>
* Create an {@code NTNumericCredential} with an integer value.
*
* @param token the Windows NT security token for this user.
*/
public NTNumericCredential(long token) {
this.impersonationToken = token;
@ -50,23 +46,19 @@ public class NTNumericCredential {
/**
* Return an integer representation of this
* <code>NTNumericCredential</code>.
*
* <p>
* {@code NTNumericCredential}.
*
* @return an integer representation of this
* <code>NTNumericCredential</code>.
* {@code NTNumericCredential}.
*/
public long getToken() {
return impersonationToken;
}
/**
* Return a string representation of this <code>NTNumericCredential</code>.
* Return a string representation of this {@code NTNumericCredential}.
*
* <p>
*
* @return a string representation of this <code>NTNumericCredential</code>.
* @return a string representation of this {@code NTNumericCredential}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -78,18 +70,16 @@ public class NTNumericCredential {
}
/**
* Compares the specified Object with this <code>NTNumericCredential</code>
* Compares the specified Object with this {@code NTNumericCredential}
* for equality. Returns true if the given object is also a
* <code>NTNumericCredential</code> and the two NTNumericCredentials
* {@code NTNumericCredential} and the two NTNumericCredentials
* represent the same NT security token.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTNumericCredential</code>.
* {@code NTNumericCredential}.
*
* @return true if the specified Object is equal to this
* <code>NTNumericCredential</code>.
* {@code NTNumericCredential}.
*/
public boolean equals(Object o) {
if (o == null)
@ -108,11 +98,9 @@ public class NTNumericCredential {
}
/**
* Return a hash code for this <code>NTNumericCredential</code>.
* Return a hash code for this {@code NTNumericCredential}.
*
* <p>
*
* @return a hash code for this <code>NTNumericCredential</code>.
* @return a hash code for this {@code NTNumericCredential}.
*/
public int hashCode() {
return (int)this.impersonationToken;

View File

@ -28,7 +28,7 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents information about a Windows NT user, group or realm.
*
* <p> Windows NT chooses to represent users, groups and realms (or domains)
@ -37,12 +37,12 @@ import java.security.Principal;
* also provides services that render these SIDs into string forms.
* This class represents these string forms.
*
* <p> Principals such as this <code>NTSid</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTSid}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -58,16 +58,14 @@ public class NTSid implements Principal, java.io.Serializable {
private String sid;
/**
* Create an <code>NTSid</code> with a Windows NT SID.
* Create an {@code NTSid} with a Windows NT SID.
*
* <p>
* @param stringSid the Windows NT SID.
*
* @param stringSid the Windows NT SID. <p>
* @exception NullPointerException if the {@code String}
* is {@code null}.
*
* @exception NullPointerException if the <code>String</code>
* is <code>null</code>.
*
* @exception IllegalArgumentException if the <code>String</code>
* @exception IllegalArgumentException if the {@code String}
* has zero length.
*/
public NTSid (String stringSid) {
@ -89,22 +87,18 @@ public class NTSid implements Principal, java.io.Serializable {
}
/**
* Return a string version of this <code>NTSid</code>.
* Return a string version of this {@code NTSid}.
*
* <p>
*
* @return a string version of this <code>NTSid</code>
* @return a string version of this {@code NTSid}
*/
public String getName() {
return sid;
}
/**
* Return a string representation of this <code>NTSid</code>.
* Return a string representation of this {@code NTSid}.
*
* <p>
*
* @return a string representation of this <code>NTSid</code>.
* @return a string representation of this {@code NTSid}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -116,18 +110,16 @@ public class NTSid implements Principal, java.io.Serializable {
}
/**
* Compares the specified Object with this <code>NTSid</code>
* Compares the specified Object with this {@code NTSid}
* for equality. Returns true if the given object is also a
* <code>NTSid</code> and the two NTSids have the same String
* {@code NTSid} and the two NTSids have the same String
* representation.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTSid</code>.
* {@code NTSid}.
*
* @return true if the specified Object is equal to this
* <code>NTSid</code>.
* {@code NTSid}.
*/
public boolean equals(Object o) {
if (o == null)
@ -147,11 +139,9 @@ public class NTSid implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>NTSid</code>.
* Return a hash code for this {@code NTSid}.
*
* <p>
*
* @return a hash code for this <code>NTSid</code>.
* @return a hash code for this {@code NTSid}.
*/
public int hashCode() {
return sid.hashCode();

View File

@ -26,19 +26,19 @@
package com.sun.security.auth;
/**
* <p> This class extends <code>NTSid</code>
* This class extends {@code NTSid}
* and represents a Windows NT user's domain SID.
*
* <p> An NT user only has a domain SID if in fact they are logged
* into an NT domain. If the user is logged into a workgroup or
* just a standalone configuration, they will NOT have a domain SID.
*
* <p> Principals such as this <code>NTSidDomainPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTSidDomainPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -49,27 +49,23 @@ public class NTSidDomainPrincipal extends NTSid {
private static final long serialVersionUID = 5247810785821650912L;
/**
* Create an <code>NTSidDomainPrincipal</code> with a Windows NT SID.
*
* <p>
* Create an {@code NTSidDomainPrincipal} with a Windows NT SID.
*
* @param name a string version of the Windows NT SID for this
* user's domain.<p>
* user's domain.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTSidDomainPrincipal(String name) {
super(name);
}
/**
* Return a string representation of this <code>NTSidDomainPrincipal</code>.
*
* <p>
* Return a string representation of this {@code NTSidDomainPrincipal}.
*
* @return a string representation of this
* <code>NTSidDomainPrincipal</code>.
* {@code NTSidDomainPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -81,18 +77,16 @@ public class NTSidDomainPrincipal extends NTSid {
}
/**
* Compares the specified Object with this <code>NTSidDomainPrincipal</code>
* Compares the specified Object with this {@code NTSidDomainPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTSidDomainPrincipal</code> and the two NTSidDomainPrincipals
* {@code NTSidDomainPrincipal} and the two NTSidDomainPrincipals
* have the same SID.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTSidDomainPrincipal</code>.
* {@code NTSidDomainPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTSidDomainPrincipal</code>.
* {@code NTSidDomainPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)

View File

@ -26,15 +26,15 @@
package com.sun.security.auth;
/**
* <p> This class extends <code>NTSid</code>
* This class extends {@code NTSid}
* and represents one of the groups to which a Windows NT user belongs.
*
* <p> Principals such as this <code>NTSidGroupPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTSidGroupPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -46,25 +46,21 @@ public class NTSidGroupPrincipal extends NTSid {
private static final long serialVersionUID = -1373347438636198229L;
/**
* Create an <code>NTSidGroupPrincipal</code> with a Windows NT group name.
* Create an {@code NTSidGroupPrincipal} with a Windows NT group name.
*
* <p>
* @param name the Windows NT group SID for this user.
*
* @param name the Windows NT group SID for this user. <p>
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTSidGroupPrincipal(String name) {
super(name);
}
/**
* Return a string representation of this <code>NTSidGroupPrincipal</code>.
* Return a string representation of this {@code NTSidGroupPrincipal}.
*
* <p>
*
* @return a string representation of this <code>NTSidGroupPrincipal</code>.
* @return a string representation of this {@code NTSidGroupPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -76,18 +72,16 @@ public class NTSidGroupPrincipal extends NTSid {
}
/**
* Compares the specified Object with this <code>NTSidGroupPrincipal</code>
* Compares the specified Object with this {@code NTSidGroupPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTSidGroupPrincipal</code> and the two NTSidGroupPrincipals
* {@code NTSidGroupPrincipal} and the two NTSidGroupPrincipals
* have the same SID.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTSidGroupPrincipal</code>.
* {@code NTSidGroupPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTSidGroupPrincipal</code>.
* {@code NTSidGroupPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)

View File

@ -26,15 +26,15 @@
package com.sun.security.auth;
/**
* <p> This class extends <code>NTSid</code>
* This class extends {@code NTSid}
* and represents a Windows NT user's primary group SID.
*
* <p> Principals such as this <code>NTSidPrimaryGroupPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTSidPrimaryGroupPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -45,15 +45,13 @@ public class NTSidPrimaryGroupPrincipal extends NTSid {
private static final long serialVersionUID = 8011978367305190527L;
/**
* Create an <code>NTSidPrimaryGroupPrincipal</code> with a Windows NT
* Create an {@code NTSidPrimaryGroupPrincipal} with a Windows NT
* group SID.
*
* <p>
* @param name the primary Windows NT group SID for this user.
*
* @param name the primary Windows NT group SID for this user. <p>
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTSidPrimaryGroupPrincipal(String name) {
super(name);
@ -61,12 +59,10 @@ public class NTSidPrimaryGroupPrincipal extends NTSid {
/**
* Return a string representation of this
* <code>NTSidPrimaryGroupPrincipal</code>.
*
* <p>
* {@code NTSidPrimaryGroupPrincipal}.
*
* @return a string representation of this
* <code>NTSidPrimaryGroupPrincipal</code>.
* {@code NTSidPrimaryGroupPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -79,18 +75,16 @@ public class NTSidPrimaryGroupPrincipal extends NTSid {
/**
* Compares the specified Object with this
* <code>NTSidPrimaryGroupPrincipal</code>
* {@code NTSidPrimaryGroupPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTSidPrimaryGroupPrincipal</code> and the two
* {@code NTSidPrimaryGroupPrincipal} and the two
* NTSidPrimaryGroupPrincipals have the same SID.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTSidPrimaryGroupPrincipal</code>.
* {@code NTSidPrimaryGroupPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTSidPrimaryGroupPrincipal</code>.
* {@code NTSidPrimaryGroupPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)

View File

@ -26,15 +26,15 @@
package com.sun.security.auth;
/**
* <p> This class extends <code>NTSid</code>
* This class extends {@code NTSid}
* and represents a Windows NT user's SID.
*
* <p> Principals such as this <code>NTSidUserPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTSidUserPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -45,25 +45,21 @@ public class NTSidUserPrincipal extends NTSid {
private static final long serialVersionUID = -5573239889517749525L;
/**
* Create an <code>NTSidUserPrincipal</code> with a Windows NT SID.
* Create an {@code NTSidUserPrincipal} with a Windows NT SID.
*
* <p>
* @param name a string version of the Windows NT SID for this user.
*
* @param name a string version of the Windows NT SID for this user.<p>
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTSidUserPrincipal(String name) {
super(name);
}
/**
* Return a string representation of this <code>NTSidUserPrincipal</code>.
* Return a string representation of this {@code NTSidUserPrincipal}.
*
* <p>
*
* @return a string representation of this <code>NTSidUserPrincipal</code>.
* @return a string representation of this {@code NTSidUserPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -75,18 +71,16 @@ public class NTSidUserPrincipal extends NTSid {
}
/**
* Compares the specified Object with this <code>NTSidUserPrincipal</code>
* Compares the specified Object with this {@code NTSidUserPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTSidUserPrincipal</code> and the two NTSidUserPrincipals
* {@code NTSidUserPrincipal} and the two NTSidUserPrincipals
* have the same SID.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTSidUserPrincipal</code>.
* {@code NTSidUserPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTSidUserPrincipal</code>.
* {@code NTSidUserPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a Windows NT user.
*
* <p> Principals such as this <code>NTUserPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code NTUserPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -52,14 +52,12 @@ public class NTUserPrincipal implements Principal, java.io.Serializable {
private String name;
/**
* Create an <code>NTUserPrincipal</code> with a Windows NT username.
* Create an {@code NTUserPrincipal} with a Windows NT username.
*
* <p>
* @param name the Windows NT username for this user.
*
* @param name the Windows NT username for this user. <p>
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public NTUserPrincipal(String name) {
if (name == null) {
@ -74,22 +72,18 @@ public class NTUserPrincipal implements Principal, java.io.Serializable {
}
/**
* Return the Windows NT username for this <code>NTPrincipal</code>.
* Return the Windows NT username for this {@code NTPrincipal}.
*
* <p>
*
* @return the Windows NT username for this <code>NTPrincipal</code>
* @return the Windows NT username for this {@code NTPrincipal}
*/
public String getName() {
return name;
}
/**
* Return a string representation of this <code>NTPrincipal</code>.
* Return a string representation of this {@code NTPrincipal}.
*
* <p>
*
* @return a string representation of this <code>NTPrincipal</code>.
* @return a string representation of this {@code NTPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -101,18 +95,16 @@ public class NTUserPrincipal implements Principal, java.io.Serializable {
}
/**
* Compares the specified Object with this <code>NTUserPrincipal</code>
* Compares the specified Object with this {@code NTUserPrincipal}
* for equality. Returns true if the given object is also a
* <code>NTUserPrincipal</code> and the two NTUserPrincipals
* {@code NTUserPrincipal} and the two NTUserPrincipals
* have the same name.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>NTPrincipal</code>.
* {@code NTPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>NTPrincipal</code>.
* {@code NTPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -131,11 +123,9 @@ public class NTUserPrincipal implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>NTUserPrincipal</code>.
* Return a hash code for this {@code NTUserPrincipal}.
*
* <p>
*
* @return a hash code for this <code>NTUserPrincipal</code>.
* @return a hash code for this {@code NTUserPrincipal}.
*/
public int hashCode() {
return this.getName().hashCode();

View File

@ -31,25 +31,25 @@ import javax.security.auth.Subject;
/**
* This class represents a default implementation for
* <code>javax.security.auth.Policy</code>.
* {@code javax.security.auth.Policy}.
*
* <p> This object stores the policy for entire Java runtime,
* and is the amalgamation of multiple static policy
* configurations that resides in files.
* The algorithm for locating the policy file(s) and reading their
* information into this <code>Policy</code> object is:
* information into this {@code Policy} object is:
*
* <ol>
* <li>
* Loop through the security properties,
* <i>auth.policy.url.1</i>, <i>auth.policy.url.2</i>, ...,
* <i>auth.policy.url.X</i>".
* Each property value specifies a <code>URL</code> pointing to a
* Each property value specifies a {@code URL} pointing to a
* policy file to be loaded. Read in and load each policy.
*
* <li>
* The <code>java.lang.System</code> property <i>java.security.auth.policy</i>
* may also be set to a <code>URL</code> pointing to another policy file
* The {@code java.lang.System} property <i>java.security.auth.policy</i>
* may also be set to a {@code URL} pointing to another policy file
* (which is the case when a user uses the -D switch at runtime).
* If this property is defined, and its use is allowed by the
* security property file (the Security property,
@ -83,35 +83,35 @@ import javax.security.auth.Subject;
* doesn't matter and some are optional, as noted below).
* Italicized items represent variable values.
*
* <p> A grant entry must begin with the word <code>grant</code>.
* The <code>signedBy</code> and <code>codeBase</code>
* <p> A grant entry must begin with the word {@code grant}.
* The {@code signedBy} and {@code codeBase}
* name/value pairs are optional.
* If they are not present, then any signer (including unsigned code)
* will match, and any codeBase will match. Note that the
* <code>principal</code> name/value pair is not optional.
* This <code>Policy</code> implementation only permits
* {@code principal} name/value pair is not optional.
* This {@code Policy} implementation only permits
* Principal-based grant entries. Note that the <i>principalClass</i>
* may be set to the wildcard value, *, which allows it to match
* any <code>Principal</code> class. In addition, the <i>principalName</i>
* any {@code Principal} class. In addition, the <i>principalName</i>
* may also be set to the wildcard value, *, allowing it to match
* any <code>Principal</code> name. When setting the <i>principalName</i>
* any {@code Principal} name. When setting the <i>principalName</i>
* to the *, do not surround the * with quotes.
*
* <p> A permission entry must begin with the word <code>permission</code>.
* The word <code><i>Type</i></code> in the template above is
* a specific permission type, such as <code>java.io.FilePermission</code>
* or <code>java.lang.RuntimePermission</code>.
* <p> A permission entry must begin with the word {@code permission}.
* The word <i>{@code Type}</i> in the template above is
* a specific permission type, such as {@code java.io.FilePermission}
* or {@code java.lang.RuntimePermission}.
*
* <p> The "<i>action</i>" is required for
* many permission types, such as <code>java.io.FilePermission</code>
* many permission types, such as {@code java.io.FilePermission}
* (where it specifies what type of file access that is permitted).
* It is not required for categories such as
* <code>java.lang.RuntimePermission</code>
* {@code java.lang.RuntimePermission}
* where it is not necessary - you either have the
* permission specified by the <code>"<i>name</i>"</code>
* permission specified by the "<i>{@code name}</i>"
* value following the type name or you don't.
*
* <p> The <code>signedBy</code> name/value pair for a permission entry
* <p> The {@code signedBy} name/value pair for a permission entry
* is optional. If present, it indicates a signed permission. That is,
* the permission class itself must be signed by the given alias in
* order for it to be granted. For example,
@ -124,18 +124,18 @@ import javax.security.auth.Subject;
* </pre>
*
* <p> Then this permission of type <i>Foo</i> is granted if the
* <code>Foo.class</code> permission has been signed by the
* "FooSoft" alias, or if <code>Foo.class</code> is a
* {@code Foo.class} permission has been signed by the
* "FooSoft" alias, or if {@code Foo.class} is a
* system class (i.e., is found on the CLASSPATH).
*
* <p> Items that appear in an entry must appear in the specified order
* (<code>permission</code>, <i>Type</i>, "<i>name</i>", and
* ({@code permission}, <i>Type</i>, "<i>name</i>", and
* "<i>action</i>"). An entry is terminated with a semicolon.
*
* <p> Case is unimportant for the identifiers (<code>permission</code>,
* <code>signedBy</code>, <code>codeBase</code>, etc.) but is
* <p> Case is unimportant for the identifiers ({@code permission},
* {@code signedBy}, {@code codeBase}, etc.) but is
* significant for the <i>Type</i>
* or for any string that is passed in as a value. <p>
* or for any string that is passed in as a value.
*
* <p> An example of two entries in a policy configuration file is
* <pre>
@ -153,15 +153,15 @@ import javax.security.auth.Subject;
* permission java.util.PropertyPermission "java.vendor";
* </pre>
*
* <p> This <code>Policy</code> implementation supports
* <p> This {@code Policy} implementation supports
* special handling for PrivateCredentialPermissions.
* If a grant entry is configured with a
* <code>PrivateCredentialPermission</code>,
* {@code PrivateCredentialPermission},
* and the "Principal Class/Principal Name" for that
* <code>PrivateCredentialPermission</code> is "self",
* then the entry grants the specified <code>Subject</code> permission to
* {@code PrivateCredentialPermission} is "self",
* then the entry grants the specified {@code Subject} permission to
* access its own private Credential. For example,
* the following grants the <code>Subject</code> "Duke"
* the following grants the {@code Subject} "Duke"
* access to its own a.b.Credential.
*
* <pre>
@ -172,7 +172,7 @@ import javax.security.auth.Subject;
* };
* </pre>
*
* The following grants the <code>Subject</code> "Duke"
* The following grants the {@code Subject} "Duke"
* access to all of its own private Credentials:
*
* <pre>
@ -184,7 +184,7 @@ import javax.security.auth.Subject;
* </pre>
*
* The following grants all Subjects authenticated as a
* <code>SolarisPrincipal</code> (regardless of their respective names)
* {@code SolarisPrincipal} (regardless of their respective names)
* permission to access their own private Credentials:
*
* <pre>
@ -207,7 +207,7 @@ import javax.security.auth.Subject;
* </pre>
* @deprecated As of JDK&nbsp;1.4, replaced by
* <code>sun.security.provider.PolicyFile</code>.
* {@code sun.security.provider.PolicyFile}.
* This class is entirely deprecated.
*
* @see java.security.CodeSource
@ -232,10 +232,8 @@ public class PolicyFile extends javax.security.auth.Policy {
/**
* Refreshes the policy object by re-reading all the policy files.
*
* <p>
*
* @exception SecurityException if the caller doesn't have permission
* to refresh the <code>Policy</code>.
* to refresh the {@code Policy}.
*/
@Override
public void refresh() {
@ -243,59 +241,56 @@ public class PolicyFile extends javax.security.auth.Policy {
}
/**
* Examines this <code>Policy</code> and returns the Permissions granted
* to the specified <code>Subject</code> and <code>CodeSource</code>.
* Examines this {@code Policy} and returns the Permissions granted
* to the specified {@code Subject} and {@code CodeSource}.
*
* <p> Permissions for a particular <i>grant</i> entry are returned
* if the <code>CodeSource</code> constructed using the codebase and
* signedby values specified in the entry <code>implies</code>
* the <code>CodeSource</code> provided to this method, and if the
* <code>Subject</code> provided to this method contains all of the
* if the {@code CodeSource} constructed using the codebase and
* signedby values specified in the entry {@code implies}
* the {@code CodeSource} provided to this method, and if the
* {@code Subject} provided to this method contains all of the
* Principals specified in the entry.
*
* <p> The <code>Subject</code> provided to this method contains all
* <p> The {@code Subject} provided to this method contains all
* of the Principals specified in the entry if, for each
* <code>Principal</code>, "P1", specified in the <i>grant</i> entry
* {@code Principal}, "P1", specified in the <i>grant</i> entry
* one of the following two conditions is met:
*
* <p>
* <ol>
* <li> the <code>Subject</code> has a
* <code>Principal</code>, "P2", where
* <code>P2.getClass().getName()</code> equals the
* <li> the {@code Subject} has a
* {@code Principal}, "P2", where
* {@code P2.getClass().getName()} equals the
* P1's class name, and where
* <code>P2.getName()</code> equals the P1's name.
* {@code P2.getName()} equals the P1's name.
*
* <li> P1 implements
* <code>com.sun.security.auth.PrincipalComparator</code>,
* and <code>P1.implies</code> the provided <code>Subject</code>.
* {@code com.sun.security.auth.PrincipalComparator},
* and {@code P1.implies} the provided {@code Subject}.
* </ol>
*
* <p> Note that this <code>Policy</code> implementation has
* <p> Note that this {@code Policy} implementation has
* special handling for PrivateCredentialPermissions.
* When this method encounters a <code>PrivateCredentialPermission</code>
* which specifies "self" as the <code>Principal</code> class and name,
* it does not add that <code>Permission</code> to the returned
* <code>PermissionCollection</code>. Instead, it builds
* a new <code>PrivateCredentialPermission</code>
* for each <code>Principal</code> associated with the provided
* <code>Subject</code>. Each new <code>PrivateCredentialPermission</code>
* When this method encounters a {@code PrivateCredentialPermission}
* which specifies "self" as the {@code Principal} class and name,
* it does not add that {@code Permission} to the returned
* {@code PermissionCollection}. Instead, it builds
* a new {@code PrivateCredentialPermission}
* for each {@code Principal} associated with the provided
* {@code Subject}. Each new {@code PrivateCredentialPermission}
* contains the same Credential class as specified in the
* originally granted permission, as well as the Class and name
* for the respective <code>Principal</code>.
* for the respective {@code Principal}.
*
* <p>
*
* @param subject the Permissions granted to this <code>Subject</code>
* and the additionally provided <code>CodeSource</code>
* are returned. <p>
*
* @param codesource the Permissions granted to this <code>CodeSource</code>
* and the additionally provided <code>Subject</code>
* @param subject the Permissions granted to this {@code Subject}
* and the additionally provided {@code CodeSource}
* are returned.
*
* @return the Permissions granted to the provided <code>Subject</code>
* <code>CodeSource</code>.
* @param codesource the Permissions granted to this {@code CodeSource}
* and the additionally provided {@code Subject}
* are returned.
*
* @return the Permissions granted to the provided {@code Subject}
* {@code CodeSource}.
*/
@Override
public PermissionCollection getPermissions(final Subject subject,

View File

@ -26,25 +26,25 @@
package com.sun.security.auth;
/**
* An object that implements the <code>java.security.Principal</code>
* An object that implements the {@code java.security.Principal}
* interface typically also implements this interface to provide
* a means for comparing that object to a specified <code>Subject</code>.
* a means for comparing that object to a specified {@code Subject}.
*
* <p> The comparison is achieved via the <code>implies</code> method.
* The implementation of the <code>implies</code> method determines
* whether this object "implies" the specified <code>Subject</code>.
* <p> The comparison is achieved via the {@code implies} method.
* The implementation of the {@code implies} method determines
* whether this object "implies" the specified {@code Subject}.
* One example application of this method may be for
* a "group" object to imply a particular <code>Subject</code>
* if that <code>Subject</code> belongs to the group.
* a "group" object to imply a particular {@code Subject}
* if that {@code Subject} belongs to the group.
* Another example application of this method would be for
* "role" object to imply a particular <code>Subject</code>
* if that <code>Subject</code> is currently acting in that role.
* "role" object to imply a particular {@code Subject}
* if that {@code Subject} is currently acting in that role.
*
* <p> Although classes that implement this interface typically
* also implement the <code>java.security.Principal</code> interface,
* also implement the {@code java.security.Principal} interface,
* it is not required. In other words, classes may implement the
* <code>java.security.Principal</code> interface by itself,
* the <code>PrincipalComparator</code> interface by itself,
* {@code java.security.Principal} interface by itself,
* the {@code PrincipalComparator} interface by itself,
* or both at the same time.
*
* @see java.security.Principal
@ -53,12 +53,10 @@ package com.sun.security.auth;
@jdk.Exported
public interface PrincipalComparator {
/**
* Check if the specified <code>Subject</code> is implied by
* Check if the specified {@code Subject} is implied by
* this object.
*
* <p>
*
* @return true if the specified <code>Subject</code> is implied by
* @return true if the specified {@code Subject} is implied by
* this object, or false otherwise.
*/
boolean implies(javax.security.auth.Subject subject);

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a user's Solaris group identification number (GID).
*
* <p> Principals such as this <code>SolarisNumericGroupPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code SolarisNumericGroupPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
* @deprecated As of JDK&nbsp;1.4, replaced by
* {@link UnixNumericGroupPrincipal}.
@ -73,20 +73,18 @@ public class SolarisNumericGroupPrincipal implements
private boolean primaryGroup;
/**
* Create a <code>SolarisNumericGroupPrincipal</code> using a
* <code>String</code> representation of the user's
* Create a {@code SolarisNumericGroupPrincipal} using a
* {@code String} representation of the user's
* group identification number (GID).
*
* <p>
*
* @param name the user's group identification number (GID)
* for this user. <p>
* for this user.
*
* @param primaryGroup true if the specified GID represents the
* primary group to which this user belongs.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public SolarisNumericGroupPrincipal(String name, boolean primaryGroup) {
if (name == null)
@ -97,13 +95,11 @@ public class SolarisNumericGroupPrincipal implements
}
/**
* Create a <code>SolarisNumericGroupPrincipal</code> using a
* Create a {@code SolarisNumericGroupPrincipal} using a
* long representation of the user's group identification number (GID).
*
* <p>
*
* @param name the user's group identification number (GID) for this user
* represented as a long. <p>
* represented as a long.
*
* @param primaryGroup true if the specified GID represents the
* primary group to which this user belongs.
@ -116,12 +112,10 @@ public class SolarisNumericGroupPrincipal implements
/**
* Return the user's group identification number (GID) for this
* <code>SolarisNumericGroupPrincipal</code>.
*
* <p>
* {@code SolarisNumericGroupPrincipal}.
*
* @return the user's group identification number (GID) for this
* <code>SolarisNumericGroupPrincipal</code>
* {@code SolarisNumericGroupPrincipal}
*/
public String getName() {
return name;
@ -129,12 +123,10 @@ public class SolarisNumericGroupPrincipal implements
/**
* Return the user's group identification number (GID) for this
* <code>SolarisNumericGroupPrincipal</code> as a long.
*
* <p>
* {@code SolarisNumericGroupPrincipal} as a long.
*
* @return the user's group identification number (GID) for this
* <code>SolarisNumericGroupPrincipal</code> as a long.
* {@code SolarisNumericGroupPrincipal} as a long.
*/
public long longValue() {
return Long.parseLong(name);
@ -144,8 +136,6 @@ public class SolarisNumericGroupPrincipal implements
* Return whether this group identification number (GID) represents
* the primary group to which this user belongs.
*
* <p>
*
* @return true if this group identification number (GID) represents
* the primary group to which this user belongs,
* or false otherwise.
@ -156,12 +146,10 @@ public class SolarisNumericGroupPrincipal implements
/**
* Return a string representation of this
* <code>SolarisNumericGroupPrincipal</code>.
*
* <p>
* {@code SolarisNumericGroupPrincipal}.
*
* @return a string representation of this
* <code>SolarisNumericGroupPrincipal</code>.
* {@code SolarisNumericGroupPrincipal}.
*/
public String toString() {
return((primaryGroup ?
@ -173,19 +161,17 @@ public class SolarisNumericGroupPrincipal implements
/**
* Compares the specified Object with this
* <code>SolarisNumericGroupPrincipal</code>
* {@code SolarisNumericGroupPrincipal}
* for equality. Returns true if the given object is also a
* <code>SolarisNumericGroupPrincipal</code> and the two
* {@code SolarisNumericGroupPrincipal} and the two
* SolarisNumericGroupPrincipals
* have the same group identification number (GID).
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>SolarisNumericGroupPrincipal</code>.
* {@code SolarisNumericGroupPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>SolarisNumericGroupPrincipal</code>.
* {@code SolarisNumericGroupPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -205,11 +191,9 @@ public class SolarisNumericGroupPrincipal implements
}
/**
* Return a hash code for this <code>SolarisNumericGroupPrincipal</code>.
* Return a hash code for this {@code SolarisNumericGroupPrincipal}.
*
* <p>
*
* @return a hash code for this <code>SolarisNumericGroupPrincipal</code>.
* @return a hash code for this {@code SolarisNumericGroupPrincipal}.
*/
public int hashCode() {
return toString().hashCode();

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a user's Solaris identification number (UID).
*
* <p> Principals such as this <code>SolarisNumericUserPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code SolarisNumericUserPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
* @deprecated As of JDK&nbsp;1.4, replaced by
* {@link UnixNumericUserPrincipal}.
* This class is entirely deprecated.
@ -68,16 +68,14 @@ public class SolarisNumericUserPrincipal implements
private String name;
/**
* Create a <code>SolarisNumericUserPrincipal</code> using a
* <code>String</code> representation of the
* Create a {@code SolarisNumericUserPrincipal} using a
* {@code String} representation of the
* user's identification number (UID).
*
* <p>
*
* @param name the user identification number (UID) for this user.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public SolarisNumericUserPrincipal(String name) {
if (name == null)
@ -87,11 +85,9 @@ public class SolarisNumericUserPrincipal implements
}
/**
* Create a <code>SolarisNumericUserPrincipal</code> using a
* Create a {@code SolarisNumericUserPrincipal} using a
* long representation of the user's identification number (UID).
*
* <p>
*
* @param name the user identification number (UID) for this user
* represented as a long.
*/
@ -101,12 +97,10 @@ public class SolarisNumericUserPrincipal implements
/**
* Return the user identification number (UID) for this
* <code>SolarisNumericUserPrincipal</code>.
*
* <p>
* {@code SolarisNumericUserPrincipal}.
*
* @return the user identification number (UID) for this
* <code>SolarisNumericUserPrincipal</code>
* {@code SolarisNumericUserPrincipal}
*/
public String getName() {
return name;
@ -114,12 +108,10 @@ public class SolarisNumericUserPrincipal implements
/**
* Return the user identification number (UID) for this
* <code>SolarisNumericUserPrincipal</code> as a long.
*
* <p>
* {@code SolarisNumericUserPrincipal} as a long.
*
* @return the user identification number (UID) for this
* <code>SolarisNumericUserPrincipal</code> as a long.
* {@code SolarisNumericUserPrincipal} as a long.
*/
public long longValue() {
return Long.parseLong(name);
@ -127,12 +119,10 @@ public class SolarisNumericUserPrincipal implements
/**
* Return a string representation of this
* <code>SolarisNumericUserPrincipal</code>.
*
* <p>
* {@code SolarisNumericUserPrincipal}.
*
* @return a string representation of this
* <code>SolarisNumericUserPrincipal</code>.
* {@code SolarisNumericUserPrincipal}.
*/
public String toString() {
return(rb.getString("SolarisNumericUserPrincipal.") + name);
@ -140,19 +130,17 @@ public class SolarisNumericUserPrincipal implements
/**
* Compares the specified Object with this
* <code>SolarisNumericUserPrincipal</code>
* {@code SolarisNumericUserPrincipal}
* for equality. Returns true if the given object is also a
* <code>SolarisNumericUserPrincipal</code> and the two
* {@code SolarisNumericUserPrincipal} and the two
* SolarisNumericUserPrincipals
* have the same user identification number (UID).
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>SolarisNumericUserPrincipal</code>.
* {@code SolarisNumericUserPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>SolarisNumericUserPrincipal</code>.
* {@code SolarisNumericUserPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -167,15 +155,14 @@ public class SolarisNumericUserPrincipal implements
if (this.getName().equals(that.getName()))
return true;
return false;
return false;
}
/**
* Return a hash code for this <code>SolarisNumericUserPrincipal</code>.
* Return a hash code for this {@code SolarisNumericUserPrincipal}.
*
* <p>
*
* @return a hash code for this <code>SolarisNumericUserPrincipal</code>.
* @return a hash code for this {@code SolarisNumericUserPrincipal}.
*/
public int hashCode() {
return name.hashCode();

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a Solaris user.
*
* <p> Principals such as this <code>SolarisPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code SolarisPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @deprecated As of JDK&nbsp;1.4, replaced by
* {@link UnixPrincipal}.
@ -68,12 +68,10 @@ public class SolarisPrincipal implements Principal, java.io.Serializable {
/**
* Create a SolarisPrincipal with a Solaris username.
*
* <p>
*
* @param name the Unix username for this user.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public SolarisPrincipal(String name) {
if (name == null)
@ -83,40 +81,34 @@ public class SolarisPrincipal implements Principal, java.io.Serializable {
}
/**
* Return the Unix username for this <code>SolarisPrincipal</code>.
* Return the Unix username for this {@code SolarisPrincipal}.
*
* <p>
*
* @return the Unix username for this <code>SolarisPrincipal</code>
* @return the Unix username for this {@code SolarisPrincipal}
*/
public String getName() {
return name;
}
/**
* Return a string representation of this <code>SolarisPrincipal</code>.
* Return a string representation of this {@code SolarisPrincipal}.
*
* <p>
*
* @return a string representation of this <code>SolarisPrincipal</code>.
* @return a string representation of this {@code SolarisPrincipal}.
*/
public String toString() {
return(rb.getString("SolarisPrincipal.") + name);
}
/**
* Compares the specified Object with this <code>SolarisPrincipal</code>
* Compares the specified Object with this {@code SolarisPrincipal}
* for equality. Returns true if the given object is also a
* <code>SolarisPrincipal</code> and the two SolarisPrincipals
* {@code SolarisPrincipal} and the two SolarisPrincipals
* have the same username.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>SolarisPrincipal</code>.
* {@code SolarisPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>SolarisPrincipal</code>.
* {@code SolarisPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -135,11 +127,9 @@ public class SolarisPrincipal implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>SolarisPrincipal</code>.
* Return a hash code for this {@code SolarisPrincipal}.
*
* <p>
*
* @return a hash code for this <code>SolarisPrincipal</code>.
* @return a hash code for this {@code SolarisPrincipal}.
*/
public int hashCode() {
return name.hashCode();

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a user's Unix group identification number (GID).
*
* <p> Principals such as this <code>UnixNumericGroupPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code UnixNumericGroupPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -59,20 +59,18 @@ public class UnixNumericGroupPrincipal implements
private boolean primaryGroup;
/**
* Create a <code>UnixNumericGroupPrincipal</code> using a
* <code>String</code> representation of the user's
* Create a {@code UnixNumericGroupPrincipal} using a
* {@code String} representation of the user's
* group identification number (GID).
*
* <p>
*
* @param name the user's group identification number (GID)
* for this user. <p>
* for this user.
*
* @param primaryGroup true if the specified GID represents the
* primary group to which this user belongs.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public UnixNumericGroupPrincipal(String name, boolean primaryGroup) {
if (name == null) {
@ -89,13 +87,11 @@ public class UnixNumericGroupPrincipal implements
}
/**
* Create a <code>UnixNumericGroupPrincipal</code> using a
* Create a {@code UnixNumericGroupPrincipal} using a
* long representation of the user's group identification number (GID).
*
* <p>
*
* @param name the user's group identification number (GID) for this user
* represented as a long. <p>
* represented as a long.
*
* @param primaryGroup true if the specified GID represents the
* primary group to which this user belongs.
@ -108,12 +104,10 @@ public class UnixNumericGroupPrincipal implements
/**
* Return the user's group identification number (GID) for this
* <code>UnixNumericGroupPrincipal</code>.
*
* <p>
* {@code UnixNumericGroupPrincipal}.
*
* @return the user's group identification number (GID) for this
* <code>UnixNumericGroupPrincipal</code>
* {@code UnixNumericGroupPrincipal}
*/
public String getName() {
return name;
@ -121,12 +115,10 @@ public class UnixNumericGroupPrincipal implements
/**
* Return the user's group identification number (GID) for this
* <code>UnixNumericGroupPrincipal</code> as a long.
*
* <p>
* {@code UnixNumericGroupPrincipal} as a long.
*
* @return the user's group identification number (GID) for this
* <code>UnixNumericGroupPrincipal</code> as a long.
* {@code UnixNumericGroupPrincipal} as a long.
*/
public long longValue() {
return Long.parseLong(name);
@ -136,8 +128,6 @@ public class UnixNumericGroupPrincipal implements
* Return whether this group identification number (GID) represents
* the primary group to which this user belongs.
*
* <p>
*
* @return true if this group identification number (GID) represents
* the primary group to which this user belongs,
* or false otherwise.
@ -148,12 +138,10 @@ public class UnixNumericGroupPrincipal implements
/**
* Return a string representation of this
* <code>UnixNumericGroupPrincipal</code>.
*
* <p>
* {@code UnixNumericGroupPrincipal}.
*
* @return a string representation of this
* <code>UnixNumericGroupPrincipal</code>.
* {@code UnixNumericGroupPrincipal}.
*/
public String toString() {
@ -176,19 +164,17 @@ public class UnixNumericGroupPrincipal implements
/**
* Compares the specified Object with this
* <code>UnixNumericGroupPrincipal</code>
* {@code UnixNumericGroupPrincipal}
* for equality. Returns true if the given object is also a
* <code>UnixNumericGroupPrincipal</code> and the two
* {@code UnixNumericGroupPrincipal} and the two
* UnixNumericGroupPrincipals
* have the same group identification number (GID).
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>UnixNumericGroupPrincipal</code>.
* {@code UnixNumericGroupPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>UnixNumericGroupPrincipal</code>.
* {@code UnixNumericGroupPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -208,11 +194,9 @@ public class UnixNumericGroupPrincipal implements
}
/**
* Return a hash code for this <code>UnixNumericGroupPrincipal</code>.
* Return a hash code for this {@code UnixNumericGroupPrincipal}.
*
* <p>
*
* @return a hash code for this <code>UnixNumericGroupPrincipal</code>.
* @return a hash code for this {@code UnixNumericGroupPrincipal}.
*/
public int hashCode() {
return toString().hashCode();

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a user's Unix identification number (UID).
*
* <p> Principals such as this <code>UnixNumericUserPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code UnixNumericUserPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -53,16 +53,14 @@ public class UnixNumericUserPrincipal implements
private String name;
/**
* Create a <code>UnixNumericUserPrincipal</code> using a
* <code>String</code> representation of the
* Create a {@code UnixNumericUserPrincipal} using a
* {@code String} representation of the
* user's identification number (UID).
*
* <p>
*
* @param name the user identification number (UID) for this user.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public UnixNumericUserPrincipal(String name) {
if (name == null) {
@ -78,11 +76,9 @@ public class UnixNumericUserPrincipal implements
}
/**
* Create a <code>UnixNumericUserPrincipal</code> using a
* Create a {@code UnixNumericUserPrincipal} using a
* long representation of the user's identification number (UID).
*
* <p>
*
* @param name the user identification number (UID) for this user
* represented as a long.
*/
@ -92,12 +88,10 @@ public class UnixNumericUserPrincipal implements
/**
* Return the user identification number (UID) for this
* <code>UnixNumericUserPrincipal</code>.
*
* <p>
* {@code UnixNumericUserPrincipal}.
*
* @return the user identification number (UID) for this
* <code>UnixNumericUserPrincipal</code>
* {@code UnixNumericUserPrincipal}
*/
public String getName() {
return name;
@ -105,12 +99,10 @@ public class UnixNumericUserPrincipal implements
/**
* Return the user identification number (UID) for this
* <code>UnixNumericUserPrincipal</code> as a long.
*
* <p>
* {@code UnixNumericUserPrincipal} as a long.
*
* @return the user identification number (UID) for this
* <code>UnixNumericUserPrincipal</code> as a long.
* {@code UnixNumericUserPrincipal} as a long.
*/
public long longValue() {
return Long.parseLong(name);
@ -118,12 +110,10 @@ public class UnixNumericUserPrincipal implements
/**
* Return a string representation of this
* <code>UnixNumericUserPrincipal</code>.
*
* <p>
* {@code UnixNumericUserPrincipal}.
*
* @return a string representation of this
* <code>UnixNumericUserPrincipal</code>.
* {@code UnixNumericUserPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -136,19 +126,17 @@ public class UnixNumericUserPrincipal implements
/**
* Compares the specified Object with this
* <code>UnixNumericUserPrincipal</code>
* {@code UnixNumericUserPrincipal}
* for equality. Returns true if the given object is also a
* <code>UnixNumericUserPrincipal</code> and the two
* {@code UnixNumericUserPrincipal} and the two
* UnixNumericUserPrincipals
* have the same user identification number (UID).
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>UnixNumericUserPrincipal</code>.
* {@code UnixNumericUserPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>UnixNumericUserPrincipal</code>.
* {@code UnixNumericUserPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -167,11 +155,9 @@ public class UnixNumericUserPrincipal implements
}
/**
* Return a hash code for this <code>UnixNumericUserPrincipal</code>.
* Return a hash code for this {@code UnixNumericUserPrincipal}.
*
* <p>
*
* @return a hash code for this <code>UnixNumericUserPrincipal</code>.
* @return a hash code for this {@code UnixNumericUserPrincipal}.
*/
public int hashCode() {
return name.hashCode();

View File

@ -28,15 +28,15 @@ package com.sun.security.auth;
import java.security.Principal;
/**
* <p> This class implements the <code>Principal</code> interface
* This class implements the {@code Principal} interface
* and represents a Unix user.
*
* <p> Principals such as this <code>UnixPrincipal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code UnixPrincipal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -54,12 +54,10 @@ public class UnixPrincipal implements Principal, java.io.Serializable {
/**
* Create a UnixPrincipal with a Unix username.
*
* <p>
*
* @param name the Unix username for this user.
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>.
* @exception NullPointerException if the {@code name}
* is {@code null}.
*/
public UnixPrincipal(String name) {
if (name == null) {
@ -75,22 +73,18 @@ public class UnixPrincipal implements Principal, java.io.Serializable {
}
/**
* Return the Unix username for this <code>UnixPrincipal</code>.
* Return the Unix username for this {@code UnixPrincipal}.
*
* <p>
*
* @return the Unix username for this <code>UnixPrincipal</code>
* @return the Unix username for this {@code UnixPrincipal}
*/
public String getName() {
return name;
}
/**
* Return a string representation of this <code>UnixPrincipal</code>.
* Return a string representation of this {@code UnixPrincipal}.
*
* <p>
*
* @return a string representation of this <code>UnixPrincipal</code>.
* @return a string representation of this {@code UnixPrincipal}.
*/
public String toString() {
java.text.MessageFormat form = new java.text.MessageFormat
@ -102,18 +96,16 @@ public class UnixPrincipal implements Principal, java.io.Serializable {
}
/**
* Compares the specified Object with this <code>UnixPrincipal</code>
* Compares the specified Object with this {@code UnixPrincipal}
* for equality. Returns true if the given object is also a
* <code>UnixPrincipal</code> and the two UnixPrincipals
* {@code UnixPrincipal} and the two UnixPrincipals
* have the same username.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>UnixPrincipal</code>.
* {@code UnixPrincipal}.
*
* @return true if the specified Object is equal to this
* <code>UnixPrincipal</code>.
* {@code UnixPrincipal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -132,11 +124,9 @@ public class UnixPrincipal implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>UnixPrincipal</code>.
* Return a hash code for this {@code UnixPrincipal}.
*
* <p>
*
* @return a hash code for this <code>UnixPrincipal</code>.
* @return a hash code for this {@code UnixPrincipal}.
*/
public int hashCode() {
return name.hashCode();

View File

@ -29,17 +29,17 @@ import java.security.Principal;
import sun.security.x509.X500Name;
/**
* <p> This class represents an X.500 <code>Principal</code>.
* This class represents an X.500 {@code Principal}.
* X500Principals have names such as,
* "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"
* (RFC 1779 style).
*
* <p> Principals such as this <code>X500Principal</code>
* may be associated with a particular <code>Subject</code>
* to augment that <code>Subject</code> with an additional
* identity. Refer to the <code>Subject</code> class for more information
* <p> Principals such as this {@code X500Principal}
* may be associated with a particular {@code Subject}
* to augment that {@code Subject} with an additional
* identity. Refer to the {@code Subject} class for more information
* on how to achieve this. Authorization decisions can then be based upon
* the Principals associated with a <code>Subject</code>.
* the Principals associated with a {@code Subject}.
*
* @see java.security.Principal
* @see javax.security.auth.Subject
@ -76,14 +76,12 @@ public class X500Principal implements Principal, java.io.Serializable {
* such as "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"
* (RFC 1779 style).
*
* <p>
*
* @param name the X.500 name
*
* @exception NullPointerException if the <code>name</code>
* is <code>null</code>. <p>
* @exception NullPointerException if the {@code name}
* is {@code null}.
*
* @exception IllegalArgumentException if the <code>name</code>
* @exception IllegalArgumentException if the {@code name}
* is improperly specified.
*/
public X500Principal(String name) {
@ -100,38 +98,32 @@ public class X500Principal implements Principal, java.io.Serializable {
}
/**
* Return the Unix username for this <code>X500Principal</code>.
* Return the Unix username for this {@code X500Principal}.
*
* <p>
*
* @return the Unix username for this <code>X500Principal</code>
* @return the Unix username for this {@code X500Principal}
*/
public String getName() {
return thisX500Name.getName();
}
/**
* Return a string representation of this <code>X500Principal</code>.
* Return a string representation of this {@code X500Principal}.
*
* <p>
*
* @return a string representation of this <code>X500Principal</code>.
* @return a string representation of this {@code X500Principal}.
*/
public String toString() {
return thisX500Name.toString();
}
/**
* Compares the specified Object with this <code>X500Principal</code>
* Compares the specified Object with this {@code X500Principal}
* for equality.
*
* <p>
*
* @param o Object to be compared for equality with this
* <code>X500Principal</code>.
* {@code X500Principal}.
*
* @return true if the specified Object is equal to this
* <code>X500Principal</code>.
* {@code X500Principal}.
*/
public boolean equals(Object o) {
if (o == null)
@ -159,11 +151,9 @@ public class X500Principal implements Principal, java.io.Serializable {
}
/**
* Return a hash code for this <code>X500Principal</code>.
* Return a hash code for this {@code X500Principal}.
*
* <p>
*
* @return a hash code for this <code>X500Principal</code>.
* @return a hash code for this {@code X500Principal}.
*/
public int hashCode() {
return thisX500Name.hashCode();

View File

@ -44,28 +44,28 @@ import com.sun.security.auth.UnixNumericGroupPrincipal;
/**
* <p> The module prompts for a username and password
* The module prompts for a username and password
* and then verifies the password against the password stored in
* a directory service configured under JNDI.
*
* <p> This <code>LoginModule</code> interoperates with
* <p> This {@code LoginModule} interoperates with
* any conformant JNDI service provider. To direct this
* <code>LoginModule</code> to use a specific JNDI service provider,
* two options must be specified in the login <code>Configuration</code>
* for this <code>LoginModule</code>.
* {@code LoginModule} to use a specific JNDI service provider,
* two options must be specified in the login {@code Configuration}
* for this {@code LoginModule}.
* <pre>
* user.provider.url=<b>name_service_url</b>
* group.provider.url=<b>name_service_url</b>
* </pre>
*
* <b>name_service_url</b> specifies
* the directory service and path where this <code>LoginModule</code>
* the directory service and path where this {@code LoginModule}
* can access the relevant user and group information. Because this
* <code>LoginModule</code> only performs one-level searches to
* find the relevant user information, the <code>URL</code>
* {@code LoginModule} only performs one-level searches to
* find the relevant user information, the {@code URL}
* must point to a directory one level above where the user and group
* information is stored in the directory service.
* For example, to instruct this <code>LoginModule</code>
* For example, to instruct this {@code LoginModule}
* to contact a NIS server, the following URLs must be specified:
* <pre>
* user.provider.url="nis://<b>NISServerHostName</b>/<b>NISDomain</b>/user"
@ -90,14 +90,14 @@ import com.sun.security.auth.UnixNumericGroupPrincipal;
*
* <p> The format in which the user's information must be stored in
* the directory service is specified in RFC 2307. Specifically,
* this <code>LoginModule</code> will search for the user's entry in the
* this {@code LoginModule} will search for the user's entry in the
* directory service using the user's <i>uid</i> attribute,
* where <i>uid=<b>username</b></i>. If the search succeeds,
* this <code>LoginModule</code> will then
* this {@code LoginModule} will then
* obtain the user's encrypted password from the retrieved entry
* using the <i>userPassword</i> attribute.
* This <code>LoginModule</code> assumes that the password is stored
* as a byte array, which when converted to a <code>String</code>,
* This {@code LoginModule} assumes that the password is stored
* as a byte array, which when converted to a {@code String},
* has the following format:
* <pre>
* "{crypt}<b>encrypted_password</b>"
@ -106,12 +106,12 @@ import com.sun.security.auth.UnixNumericGroupPrincipal;
* The LDAP directory server must be configured
* to permit read access to the userPassword attribute.
* If the user entered a valid username and password,
* this <code>LoginModule</code> associates a
* <code>UnixPrincipal</code>, <code>UnixNumericUserPrincipal</code>,
* this {@code LoginModule} associates a
* {@code UnixPrincipal}, {@code UnixNumericUserPrincipal},
* and the relevant UnixNumericGroupPrincipals with the
* <code>Subject</code>.
* {@code Subject}.
*
* <p> This LoginModule also recognizes the following <code>Configuration</code>
* <p> This LoginModule also recognizes the following {@code Configuration}
* options:
* <pre>
* debug if, true, debug messages are output to System.out.
@ -144,7 +144,7 @@ import com.sun.security.auth.UnixNumericGroupPrincipal;
* exist for the username and password in the shared state,
* or if authentication fails.
*
* clearPass if, true, this <code>LoginModule</code> clears the
* clearPass if, true, this {@code LoginModule} clears the
* username and password stored in the module's shared state
* after both phases of authentication (login and commit)
* have completed.
@ -208,21 +208,19 @@ public class JndiLoginModule implements LoginModule {
private static final String PWD = "javax.security.auth.login.password";
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param subject the <code>Subject</code> to be authenticated. <p>
*
* @param callbackHandler a <code>CallbackHandler</code> for communicating
* @param callbackHandler a {@code CallbackHandler} for communicating
* with the end user (prompting for usernames and
* passwords, for example). <p>
* passwords, for example).
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
// Unchecked warning from (Map<String, Object>)sharedState is safe
// since javax.security.auth.login.LoginContext passes a raw HashMap.
@ -255,17 +253,15 @@ public class JndiLoginModule implements LoginModule {
}
/**
* <p> Prompt for username and password.
* Prompt for username and password.
* Verify the password against the relevant name service.
*
* <p>
*
* @return true always, since this <code>LoginModule</code>
* @return true always, since this {@code LoginModule}
* should not be ignored.
*
* @exception FailedLoginException if the authentication fails. <p>
* @exception FailedLoginException if the authentication fails.
*
* @exception LoginException if this <code>LoginModule</code>
* @exception LoginException if this {@code LoginModule}
* is unable to perform the authentication.
*/
public boolean login() throws LoginException {
@ -367,15 +363,13 @@ public class JndiLoginModule implements LoginModule {
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> method), then this method associates a
* <code>UnixPrincipal</code>
* with the <code>Subject</code> located in the
* <code>LoginModule</code>. If this LoginModule's own
* {@code login} method), then this method associates a
* {@code UnixPrincipal}
* with the {@code Subject} located in the
* {@code LoginModule}. If this LoginModule's own
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails
*
* @return true if this LoginModule's own login and commit
@ -418,18 +412,16 @@ public class JndiLoginModule implements LoginModule {
}
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication failed.
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
* did not succeed).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> and <code>commit</code> methods),
* {@code login} and {@code commit} methods),
* then this method cleans up any state that was originally saved.
*
* <p>
*
* @exception LoginException if the abort fails.
*
* @return false if this LoginModule's own login and/or commit attempts
@ -464,13 +456,11 @@ public class JndiLoginModule implements LoginModule {
* Logout a user.
*
* <p> This method removes the Principals
* that were added by the <code>commit</code> method.
*
* <p>
* that were added by the {@code commit} method.
*
* @exception LoginException if the logout fails.
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*/
public boolean logout() throws LoginException {
@ -506,8 +496,6 @@ public class JndiLoginModule implements LoginModule {
/**
* Attempt authentication
*
* <p>
*
* @param getPasswdFromSharedState boolean that tells this method whether
* to retrieve the password from the sharedState.
*/
@ -674,8 +662,6 @@ public class JndiLoginModule implements LoginModule {
* values in the shared state in case subsequent LoginModules
* want to use them via use/tryFirstPass.
*
* <p>
*
* @param getPasswdFromSharedState boolean that tells this method whether
* to retrieve the password from the sharedState.
*/

View File

@ -55,53 +55,53 @@ import sun.security.util.Password;
/**
* Provides a JAAS login module that prompts for a key store alias and
* populates the subject with the alias's principal and credentials. Stores
* an <code>X500Principal</code> for the subject distinguished name of the
* an {@code X500Principal} for the subject distinguished name of the
* first certificate in the alias's credentials in the subject's principals,
* the alias's certificate path in the subject's public credentials, and a
* <code>X500PrivateCredential</code> whose certificate is the first
* {@code X500PrivateCredential} whose certificate is the first
* certificate in the alias's certificate path and whose private key is the
* alias's private key in the subject's private credentials. <p>
*
* Recognizes the following options in the configuration file:
* <dl>
*
* <dt> <code>keyStoreURL</code> </dt>
* <dt> {@code keyStoreURL} </dt>
* <dd> A URL that specifies the location of the key store. Defaults to
* a URL pointing to the .keystore file in the directory specified by the
* <code>user.home</code> system property. The input stream from this
* URL is passed to the <code>KeyStore.load</code> method.
* "NONE" may be specified if a <code>null</code> stream must be
* passed to the <code>KeyStore.load</code> method.
* {@code user.home} system property. The input stream from this
* URL is passed to the {@code KeyStore.load} method.
* "NONE" may be specified if a {@code null} stream must be
* passed to the {@code KeyStore.load} method.
* "NONE" should be specified if the KeyStore resides
* on a hardware token device, for example.</dd>
*
* <dt> <code>keyStoreType</code> </dt>
* <dt> {@code keyStoreType} </dt>
* <dd> The key store type. If not specified, defaults to the result of
* calling <code>KeyStore.getDefaultType()</code>.
* calling {@code KeyStore.getDefaultType()}.
* If the type is "PKCS11", then keyStoreURL must be "NONE"
* and privateKeyPasswordURL must not be specified.</dd>
*
* <dt> <code>keyStoreProvider</code> </dt>
* <dt> {@code keyStoreProvider} </dt>
* <dd> The key store provider. If not specified, uses the standard search
* order to find the provider. </dd>
*
* <dt> <code>keyStoreAlias</code> </dt>
* <dt> {@code keyStoreAlias} </dt>
* <dd> The alias in the key store to login as. Required when no callback
* handler is provided. No default value. </dd>
*
* <dt> <code>keyStorePasswordURL</code> </dt>
* <dt> {@code keyStorePasswordURL} </dt>
* <dd> A URL that specifies the location of the key store password. Required
* when no callback handler is provided and
* <code>protected</code> is false.
* {@code protected} is false.
* No default value. </dd>
*
* <dt> <code>privateKeyPasswordURL</code> </dt>
* <dt> {@code privateKeyPasswordURL} </dt>
* <dd> A URL that specifies the location of the specific private key password
* needed to access the private key for this alias.
* The keystore password
* is used if this value is needed and not specified. </dd>
*
* <dt> <code>protected</code> </dt>
* <dt> {@code protected} </dt>
* <dd> This value should be set to "true" if the KeyStore
* has a separate, protected authentication path
* (for example, a dedicated PIN-pad attached to a smart card).
@ -174,22 +174,20 @@ public class KeyStoreLoginModule implements LoginModule {
/* -- Methods -- */
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param subject the <code>Subject</code> to be authenticated. <p>
*
* @param callbackHandler a <code>CallbackHandler</code> for communicating
* @param callbackHandler a {@code CallbackHandler} for communicating
* with the end user (prompting for usernames and
* passwords, for example),
* which may be <code>null</code>. <p>
* which may be {@code null}.
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
// Unchecked warning from (Map<String, Object>)sharedState is safe
// since javax.security.auth.login.LoginContext passes a raw HashMap.
@ -258,11 +256,9 @@ public class KeyStoreLoginModule implements LoginModule {
* <p> Get the Keystore alias and relevant passwords.
* Retrieve the alias's principal and credentials from the Keystore.
*
* <p>
* @exception FailedLoginException if the authentication fails.
*
* @exception FailedLoginException if the authentication fails. <p>
*
* @return true in all cases (this <code>LoginModule</code>
* @return true in all cases (this {@code LoginModule}
* should not be ignored).
*/
@ -719,19 +715,17 @@ public class KeyStoreLoginModule implements LoginModule {
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> method), then this method associates a
* <code>X500Principal</code> for the subject distinguished name of the
* {@code login} method), then this method associates a
* {@code X500Principal} for the subject distinguished name of the
* first certificate in the alias's credentials in the subject's
* principals,the alias's certificate path in the subject's public
* credentials, and a<code>X500PrivateCredential</code> whose certificate
* credentials, and a {@code X500PrivateCredential} whose certificate
* is the first certificate in the alias's certificate path and whose
* private key is the alias's private key in the subject's private
* credentials. If this LoginModule's own
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails
*
* @return true if this LoginModule's own login and commit
@ -774,21 +768,19 @@ public class KeyStoreLoginModule implements LoginModule {
}
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication failed.
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
* did not succeed).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> and <code>commit</code> methods),
* {@code login} and {@code commit} methods),
* then this method cleans up any state that was originally saved.
*
* <p> If the loaded KeyStore's provider extends
* <code>java.security.AuthProvider</code>,
* then the provider's <code>logout</code> method is invoked.
*
* <p>
* {@code java.security.AuthProvider},
* then the provider's {@code logout} method is invoked.
*
* @exception LoginException if the abort fails.
*
@ -815,17 +807,15 @@ public class KeyStoreLoginModule implements LoginModule {
* Logout a user.
*
* <p> This method removes the Principals, public credentials and the
* private credentials that were added by the <code>commit</code> method.
* private credentials that were added by the {@code commit} method.
*
* <p> If the loaded KeyStore's provider extends
* <code>java.security.AuthProvider</code>,
* then the provider's <code>logout</code> method is invoked.
*
* <p>
* {@code java.security.AuthProvider},
* then the provider's {@code logout} method is invoked.
*
* @exception LoginException if the logout fails.
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*/

View File

@ -47,147 +47,142 @@ import sun.security.krb5.Credentials;
import sun.misc.HexDumpEncoder;
/**
* <p> This <code>LoginModule</code> authenticates users using
* This {@code LoginModule} authenticates users using
* Kerberos protocols.
*
* <p> The configuration entry for <code>Krb5LoginModule</code> has
* <p> The configuration entry for {@code Krb5LoginModule} has
* several options that control the authentication process and
* additions to the <code>Subject</code>'s private credential
* set. Irrespective of these options, the <code>Subject</code>'s
* additions to the {@code Subject}'s private credential
* set. Irrespective of these options, the {@code Subject}'s
* principal set and private credentials set are updated only when
* <code>commit</code> is called.
* When <code>commit</code> is called, the <code>KerberosPrincipal</code>
* is added to the <code>Subject</code>'s principal set (unless the
* <code>principal</code> is specified as "*"). If <code>isInitiator</code>
* is true, the <code>KerberosTicket</code> is
* added to the <code>Subject</code>'s private credentials.
* {@code commit} is called.
* When {@code commit} is called, the {@code KerberosPrincipal}
* is added to the {@code Subject}'s principal set (unless the
* {@code principal} is specified as "*"). If {@code isInitiator}
* is true, the {@code KerberosTicket} is
* added to the {@code Subject}'s private credentials.
*
* <p> If the configuration entry for <code>KerberosLoginModule</code>
* has the option <code>storeKey</code> set to true, then
* <code>KerberosKey</code> or <code>KeyTab</code> will also be added to the
* subject's private credentials. <code>KerberosKey</code>, the principal's
* key(s) will be derived from user's password, and <code>KeyTab</code> is
* the keytab used when <code>useKeyTab</code> is set to true. The
* <code>KeyTab</code> object is restricted to be used by the specified
* <p> If the configuration entry for {@code KerberosLoginModule}
* has the option {@code storeKey} set to true, then
* {@code KerberosKey} or {@code KeyTab} will also be added to the
* subject's private credentials. {@code KerberosKey}, the principal's
* key(s) will be derived from user's password, and {@code KeyTab} is
* the keytab used when {@code useKeyTab} is set to true. The
* {@code KeyTab} object is restricted to be used by the specified
* principal unless the principal value is "*".
*
* <p> This <code>LoginModule</code> recognizes the <code>doNotPrompt</code>
* <p> This {@code LoginModule} recognizes the {@code doNotPrompt}
* option. If set to true the user will not be prompted for the password.
*
* <p> The user can specify the location of the ticket cache by using
* the option <code>ticketCache</code> in the configuration entry.
* the option {@code ticketCache} in the configuration entry.
*
* <p>The user can specify the keytab location by using
* the option <code>keyTab</code>
* the option {@code keyTab}
* in the configuration entry.
*
* <p> The principal name can be specified in the configuration entry
* by using the option <code>principal</code>. The principal name
* by using the option {@code principal}. The principal name
* can either be a simple user name, a service name such as
* <code>host/mission.eng.sun.com</code>, or "*". The principal can also
* be set using the system property <code>sun.security.krb5.principal</code>.
* {@code host/mission.eng.sun.com}, or "*". The principal can also
* be set using the system property {@code sun.security.krb5.principal}.
* This property is checked during login. If this property is not set, then
* the principal name from the configuration is used. In the
* case where the principal property is not set and the principal
* entry also does not exist, the user is prompted for the name.
* When this property of entry is set, and <code>useTicketCache</code>
* When this property of entry is set, and {@code useTicketCache}
* is set to true, only TGT belonging to this principal is used.
*
* <p> The following is a list of configuration options supported
* for <code>Krb5LoginModule</code>:
* for {@code Krb5LoginModule}:
* <blockquote><dl>
* <dt><b><code>refreshKrb5Config</code></b>:</dt>
* <dt>{@code refreshKrb5Config}:</dt>
* <dd> Set this to true, if you want the configuration
* to be refreshed before the <code>login</code> method is called.</dd>
* <dt><b><code>useTicketCache</code></b>:</dt>
* to be refreshed before the {@code login} method is called.</dd>
* <dt>{@code useTicketCache}:</dt>
* <dd>Set this to true, if you want the
* TGT to be obtained
* from the ticket cache. Set this option
* TGT to be obtained from the ticket cache. Set this option
* to false if you do not want this module to use the ticket cache.
* (Default is False).
* This module will
* search for the ticket
* cache in the following locations:
* On Solaris and Linux
* it will look for the ticket cache in /tmp/krb5cc_<code>uid</code>
* where the uid is numeric user
* identifier. If the ticket cache is
* This module will search for the ticket
* cache in the following locations: On Solaris and Linux
* it will look for the ticket cache in /tmp/krb5cc_{@code uid}
* where the uid is numeric user identifier. If the ticket cache is
* not available in the above location, or if we are on a
* Windows platform, it will look for the cache as
* {user.home}{file.separator}krb5cc_{user.name}.
* You can override the ticket cache location by using
* <code>ticketCache</code>.
* {@code ticketCache}.
* For Windows, if a ticket cannot be retrieved from the file ticket cache,
* it will use Local Security Authority (LSA) API to get the TGT.
* <dt><b><code>ticketCache</code></b>:</dt>
* <dt>{@code ticketCache}:</dt>
* <dd>Set this to the name of the ticket
* cache that contains user's TGT.
* If this is set, <code>useTicketCache</code>
* If this is set, {@code useTicketCache}
* must also be set to true; Otherwise a configuration error will
* be returned.</dd>
* <dt><b><code>renewTGT</code></b>:</dt>
* <dt>{@code renewTGT}:</dt>
* <dd>Set this to true, if you want to renew
* the TGT. If this is set, <code>useTicketCache</code> must also be
* the TGT. If this is set, {@code useTicketCache} must also be
* set to true; otherwise a configuration error will be returned.</dd>
* <dt><b><code>doNotPrompt</code></b>:</dt>
* <dt>{@code doNotPrompt}:</dt>
* <dd>Set this to true if you do not want to be
* prompted for the password
* if credentials can not be obtained from the cache, the keytab,
* or through shared state.(Default is false)
* If set to true, credential must be obtained through cache, keytab,
* or shared state. Otherwise, authentication will fail.</dd>
* <dt><b><code>useKeyTab</code></b>:</dt>
* <dt>{@code useKeyTab}:</dt>
* <dd>Set this to true if you
* want the module to get the principal's key from the
* the keytab.(default value is False)
* If <code>keytab</code>
* is not set then
* If {@code keytab} is not set then
* the module will locate the keytab from the
* Kerberos configuration file.
* If it is not specified in the Kerberos configuration file
* then it will look for the file
* <code>{user.home}{file.separator}</code>krb5.keytab.</dd>
* <dt><b><code>keyTab</code></b>:</dt>
* {@code {user.home}{file.separator}}krb5.keytab.</dd>
* <dt>{@code keyTab}:</dt>
* <dd>Set this to the file name of the
* keytab to get principal's secret key.</dd>
* <dt><b><code>storeKey</code></b>:</dt>
* <dt>{@code storeKey}:</dt>
* <dd>Set this to true to if you want the keytab or the
* principal's key to be stored in the Subject's private credentials.
* For <code>isInitiator</code> being false, if <code>principal</code>
* For {@code isInitiator} being false, if {@code principal}
* is "*", the {@link KeyTab} stored can be used by anyone, otherwise,
* it's restricted to be used by the specified principal only.</dd>
* <dt><b><code>principal</code></b>:</dt>
* <dt>{@code principal}:</dt>
* <dd>The name of the principal that should
* be used. The principal can be a simple username such as
* "<code>testuser</code>" or a service name such as
* "<code>host/testhost.eng.sun.com</code>". You can use the
* <code>principal</code> option to set the principal when there are
* "{@code testuser}" or a service name such as
* "{@code host/testhost.eng.sun.com}". You can use the
* {@code principal} option to set the principal when there are
* credentials for multiple principals in the
* <code>keyTab</code> or when you want a specific ticket cache only.
* {@code keyTab} or when you want a specific ticket cache only.
* The principal can also be set using the system property
* <code>sun.security.krb5.principal</code>. In addition, if this
* {@code sun.security.krb5.principal}. In addition, if this
* system property is defined, then it will be used. If this property
* is not set, then the principal name from the configuration will be
* used.
* The principal name can be set to "*" when <code>isInitiator</code> is false.
* The principal name can be set to "*" when {@code isInitiator} is false.
* In this case, the acceptor is not bound to a single principal. It can
* act as any principal an initiator requests if keys for that principal
* can be found. When <code>isInitiator</code> is true, the principal name
* can be found. When {@code isInitiator} is true, the principal name
* cannot be set to "*".
* </dd>
* <dt><b><code>isInitiator</code></b>:</dt>
* <dt>{@code isInitiator}:</dt>
* <dd>Set this to true, if initiator. Set this to false, if acceptor only.
* (Default is true).
* Note: Do not set this value to false for initiators.</dd>
* </dl></blockquote>
*
* <p> This <code>LoginModule</code> also recognizes the following additional
* <code>Configuration</code>
* <p> This {@code LoginModule} also recognizes the following additional
* {@code Configuration}
* options that enable you to share username and passwords across different
* authentication modules:
* <blockquote><dl>
*
* <dt><b><code>useFirstPass</code></b>:</dt>
* <dt>{@code useFirstPass}:</dt>
* <dd>if, true, this LoginModule retrieves the
* username and password from the module's shared state,
* using "javax.security.auth.login.name" and
@ -197,7 +192,7 @@ import sun.misc.HexDumpEncoder;
* is made, and the failure is reported back to the
* calling application.</dd>
*
* <dt><b><code>tryFirstPass</code></b>:</dt>
* <dt>{@code tryFirstPass}:</dt>
* <dd>if, true, this LoginModule retrieves the
* the username and password from the module's shared
* state using "javax.security.auth.login.name" and
@ -210,7 +205,7 @@ import sun.misc.HexDumpEncoder;
* is made. If the authentication fails,
* the failure is reported back to the calling application</dd>
*
* <dt><b><code>storePass</code></b>:</dt>
* <dt>{@code storePass}:</dt>
* <dd>if, true, this LoginModule stores the username and
* password obtained from the CallbackHandler in the
* modules shared state, using
@ -220,7 +215,7 @@ import sun.misc.HexDumpEncoder;
* exist for the username and password in the shared
* state, or if authentication fails.</dd>
*
* <dt><b><code>clearPass</code></b>:</dt>
* <dt>{@code clearPass}:</dt>
* <dd>if, true, this LoginModule clears the
* username and password stored in the module's shared
* state after both phases of authentication
@ -236,148 +231,137 @@ import sun.misc.HexDumpEncoder;
* <li>shared state
* <li>user prompt
* </ol>
*
* <p>Note that if any step fails, it will fallback to the next step.
* There's only one exception, if the shared state step fails and
* <code>useFirstPass</code>=true, no user prompt is made.
* {@code useFirstPass = true}, no user prompt is made.
* <p>Examples of some configuration values for Krb5LoginModule in
* JAAS config file and the results are:
* <ul>
* <p> <code>doNotPrompt</code>=true;
* </ul>
* <p> This is an illegal combination since none of <code>useTicketCache</code>,
* <code>useKeyTab</code>, <code>useFirstPass</code> and <code>tryFirstPass</code>
* is set and the user can not be prompted for the password.
*<ul>
* <p> <code>ticketCache</code> = &lt;filename&gt;;
*</ul>
* <p> This is an illegal combination since <code>useTicketCache</code>
* <blockquote><dl>
* <dd><pre>{@code
* doNotPrompt = true}</pre>
* This is an illegal combination since none of {@code useTicketCache,
* useKeyTab, useFirstPass} and {@code tryFirstPass}
* is set and the user can not be prompted for the password.</dd>
*
* <dd><pre>{@code
* ticketCache = <filename>}</pre>
* This is an illegal combination since {@code useTicketCache}
* is not set to true and the ticketCache is set. A configuration error
* will occur.
* <ul>
* <p> <code>renewTGT</code>=true;
*</ul>
* <p> This is an illegal combination since <code>useTicketCache</code> is
* not set to true and renewTGT is set. A configuration error will occur.
* <ul>
* <p> <code>storeKey</code>=true
* <code>useTicketCache</code> = true
* <code>doNotPrompt</code>=true;;
*</ul>
* <p> This is an illegal combination since <code>storeKey</code> is set to
* will occur.</dd>
*
* <dd><pre>{@code
* renewTGT = true}</pre>
* This is an illegal combination since {@code useTicketCache} is
* not set to true and renewTGT is set. A configuration error will occur.</dd>
*
* <dd><pre>{@code
* storeKey = true useTicketCache = true doNotPrompt = true}</pre>
* This is an illegal combination since {@code storeKey} is set to
* true but the key can not be obtained either by prompting the user or from
* the keytab, or from the shared state. A configuration error will occur.
* <ul>
* <p> <code>keyTab</code> = &lt;filename&gt; <code>doNotPrompt</code>=true ;
* </ul>
* <p>This is an illegal combination since useKeyTab is not set to true and
* the keyTab is set. A configuration error will occur.
* <ul>
* <p> <code>debug=true </code>
*</ul>
* <p> Prompt the user for the principal name and the password.
* the keytab, or from the shared state. A configuration error will occur.</dd>
*
* <dd><pre>{@code
* keyTab = <filename> doNotPrompt = true}</pre>
* This is an illegal combination since useKeyTab is not set to true and
* the keyTab is set. A configuration error will occur.</dd>
*
* <dd><pre>{@code
* debug = true}</pre>
* Prompt the user for the principal name and the password.
* Use the authentication exchange to get TGT from the KDC and
* populate the <code>Subject</code> with the principal and TGT.
* Output debug messages.
* <ul>
* <p> <code>useTicketCache</code> = true <code>doNotPrompt</code>=true;
*</ul>
* <p>Check the default cache for TGT and populate the <code>Subject</code>
* populate the {@code Subject} with the principal and TGT.
* Output debug messages.</dd>
*
* <dd><pre>{@code
* useTicketCache = true doNotPrompt = true}</pre>
* Check the default cache for TGT and populate the {@code Subject}
* with the principal and TGT. If the TGT is not available,
* do not prompt the user, instead fail the authentication.
* <ul>
* <p><code>principal</code>=&lt;name&gt;<code>useTicketCache</code> = true
* <code>doNotPrompt</code>=true;
*</ul>
* <p> Get the TGT from the default cache for the principal and populate the
* do not prompt the user, instead fail the authentication.</dd>
*
* <dd><pre>{@code
* principal = <name> useTicketCache = true doNotPrompt = true}</pre>
* Get the TGT from the default cache for the principal and populate the
* Subject's principal and private creds set. If ticket cache is
* not available or does not contain the principal's TGT
* authentication will fail.
* <ul>
* <p> <code>useTicketCache</code> = true
* <code>ticketCache</code>=&lt;file name&gt;<code>useKeyTab</code> = true
* <code> keyTab</code>=&lt;keytab filename&gt;
* <code>principal</code> = &lt;principal name&gt;
* <code>doNotPrompt</code>=true;
*</ul>
* <p> Search the cache for the principal's TGT. If it is not available
* authentication will fail.</dd>
*
* <dd><pre>{@code
* useTicketCache = true
* ticketCache = <file name>
* useKeyTab = true
* keyTab = <keytab filename>
* principal = <principal name>
* doNotPrompt = true}</pre>
* Search the cache for the principal's TGT. If it is not available
* use the key in the keytab to perform authentication exchange with the
* KDC and acquire the TGT.
* The Subject will be populated with the principal and the TGT.
* If the key is not available or valid then authentication will fail.
* <ul>
* <p><code>useTicketCache</code> = true
* <code>ticketCache</code>=&lt;file name&gt;
*</ul>
* <p> The TGT will be obtained from the cache specified.
* If the key is not available or valid then authentication will fail.</dd>
*
* <dd><pre>{@code
* useTicketCache = true ticketCache = <filename>}</pre>
* The TGT will be obtained from the cache specified.
* The Kerberos principal name used will be the principal name in
* the Ticket cache. If the TGT is not available in the
* ticket cache the user will be prompted for the principal name
* and the password. The TGT will be obtained using the authentication
* exchange with the KDC.
* The Subject will be populated with the TGT.
*<ul>
* <p> <code>useKeyTab</code> = true
* <code>keyTab</code>=&lt;keytab filename&gt;
* <code>principal</code>= &lt;principal name&gt;
* <code>storeKey</code>=true;
*</ul>
* <p> The key for the principal will be retrieved from the keytab.
* The Subject will be populated with the TGT.</dd>
*
* <dd><pre>{@code
* useKeyTab = true keyTab=<keytab filename> principal = <principal name> storeKey = true}</pre>
* The key for the principal will be retrieved from the keytab.
* If the key is not available in the keytab the user will be prompted
* for the principal's password. The Subject will be populated
* with the principal's key either from the keytab or derived from the
* password entered.
* <ul>
* <p> <code>useKeyTab</code> = true
* <code>keyTab</code>=&lt;keytabname&gt;
* <code>storeKey</code>=true
* <code>doNotPrompt</code>=false;
*</ul>
* <p>The user will be prompted for the service principal name.
* password entered.</dd>
*
* <dd><pre>{@code
* useKeyTab = true keyTab = <keytabname> storeKey = true doNotPrompt = false}</pre>
* The user will be prompted for the service principal name.
* If the principal's
* longterm key is available in the keytab , it will be added to the
* Subject's private credentials. An authentication exchange will be
* attempted with the principal name and the key from the Keytab.
* If successful the TGT will be added to the
* Subject's private credentials set. Otherwise the authentication will
* fail.
* <ul>
* <p> <code>isInitiator</code> = false <code>useKeyTab</code> = true
* <code>keyTab</code>=&lt;keytabname&gt;
* <code>storeKey</code>=true
* <code>principal</code>=*;
*</ul>
* <p>The acceptor will be an unbound acceptor and it can act as any principal
* as long that principal has keys in the keytab.
*<ul>
* <p>
* <code>useTicketCache</code>=true
* <code>ticketCache</code>=&lt;file name&gt;;
* <code>useKeyTab</code> = true
* <code>keyTab</code>=&lt;file name&gt; <code>storeKey</code>=true
* <code>principal</code>= &lt;principal name&gt;
*</ul>
* <p>
* Subject's private credentials set. Otherwise the authentication will fail.</dd>
*
* <dd><pre>{@code
* isInitiator = false useKeyTab = true keyTab = <keytabname> storeKey = true principal = *}</pre>
* The acceptor will be an unbound acceptor and it can act as any principal
* as long that principal has keys in the keytab.</dd>
*
* <dd><pre>{@code
* useTicketCache = true
* ticketCache = <file name>
* useKeyTab = true
* keyTab = <file name>
* storeKey = true
* principal = <principal name>}</pre>
* The client's TGT will be retrieved from the ticket cache and added to the
* <code>Subject</code>'s private credentials. If the TGT is not available
* {@code Subject}'s private credentials. If the TGT is not available
* in the ticket cache, or the TGT's client name does not match the principal
* name, Java will use a secret key to obtain the TGT using the authentication
* exchange and added to the Subject's private credentials.
* This secret key will be first retrieved from the keytab. If the key
* is not available, the user will be prompted for the password. In either
* case, the key derived from the password will be added to the
* Subject's private credentials set.
* <ul>
* <p><code>isInitiator</code> = false
*</ul>
* <p>Configured to act as acceptor only, credentials are not acquired
* Subject's private credentials set.</dd>
*
* <dd><pre>{@code
* isInitiator = false}</pre>
* Configured to act as acceptor only, credentials are not acquired
* via AS exchange. For acceptors only, set this value to false.
* For initiators, do not set this value to false.
* <ul>
* <p><code>isInitiator</code> = true
*</ul>
* <p>Configured to act as initiator, credentials are acquired
* For initiators, do not set this value to false.</dd>
*
* <dd><pre>{@code
* isInitiator = true}</pre>
* Configured to act as initiator, credentials are acquired
* via AS exchange. For initiators, set this value to true, or leave this
* option unset, in which case default value (true) will be used.
* option unset, in which case default value (true) will be used.</dd>
*
* </dl></blockquote>
*
* @author Ram Marti
*/
@ -445,20 +429,19 @@ public class Krb5LoginModule implements LoginModule {
);
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the <code>Subject</code> to be authenticated. <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param callbackHandler a <code>CallbackHandler</code> for
* @param callbackHandler a {@code CallbackHandler} for
* communication with the end user (prompting for
* usernames and passwords, for example). <p>
* usernames and passwords, for example).
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
// Unchecked warning from (Map<String, Object>)sharedState is safe
// since javax.security.auth.login.LoginContext passes a raw HashMap.
@ -536,14 +519,12 @@ public class Krb5LoginModule implements LoginModule {
/**
* Authenticate the user
*
* <p>
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*
* @exception FailedLoginException if the authentication fails. <p>
* @exception FailedLoginException if the authentication fails.
*
* @exception LoginException if this <code>LoginModule</code>
* @exception LoginException if this {@code LoginModule}
* is unable to perform the authentication.
*/
public boolean login() throws LoginException {
@ -1019,23 +1000,21 @@ public class Krb5LoginModule implements LoginModule {
}
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication succeeded
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL
* LoginModules succeeded).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> method), then this method associates a
* <code>Krb5Principal</code>
* with the <code>Subject</code> located in the
* <code>LoginModule</code>. It adds Kerberos Credentials to the
* {@code login} method), then this method associates a
* {@code Krb5Principal}
* with the {@code Subject} located in the
* {@code LoginModule}. It adds Kerberos Credentials to the
* the Subject's private credentials set. If this LoginModule's own
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails.
*
* @return true if this LoginModule's own login and commit
@ -1147,18 +1126,16 @@ public class Krb5LoginModule implements LoginModule {
}
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication failed.
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL
* LoginModules did not succeed).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> and <code>commit</code> methods),
* {@code login} and {@code commit} methods),
* then this method cleans up any state that was originally saved.
*
* <p>
*
* @exception LoginException if the abort fails.
*
* @return false if this LoginModule's own login and/or commit attempts
@ -1183,14 +1160,12 @@ public class Krb5LoginModule implements LoginModule {
/**
* Logout the user.
*
* <p> This method removes the <code>Krb5Principal</code>
* that was added by the <code>commit</code> method.
*
* <p>
* <p> This method removes the {@code Krb5Principal}
* that was added by the {@code commit} method.
*
* @exception LoginException if the logout fails.
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*/
public boolean logout() throws LoginException {

View File

@ -70,8 +70,8 @@ import com.sun.security.auth.UserPrincipal;
* conjunction with a specified search filter.
* If successful then authentication is attempted using the user's
* distinguished name and the supplied password.
* To enable this mode, set the <code>userFilter</code> option and omit the
* <code>authIdentity</code> option.
* To enable this mode, set the {@code userFilter} option and omit the
* {@code authIdentity} option.
* Use search-first mode when the user's distinguished name is not
* known in advance.
*
@ -79,22 +79,22 @@ import com.sun.security.auth.UserPrincipal;
* supplied username and password and then the LDAP directory is searched.
* If authentication is successful then a search is performed using the
* supplied username in conjunction with a specified search filter.
* To enable this mode, set the <code>authIdentity</code> and the
* <code>userFilter</code> options.
* To enable this mode, set the {@code authIdentity} and the
* {@code userFilter} options.
* Use authentication-first mode when accessing an LDAP directory
* that has been configured to disallow anonymous searches.
*
* <p> In authentication-only mode, authentication is attempted using the
* supplied username and password. The LDAP directory is not searched because
* the user's distinguished name is already known.
* To enable this mode, set the <code>authIdentity</code> option to a valid
* distinguished name and omit the <code>userFilter</code> option.
* To enable this mode, set the {@code authIdentity} option to a valid
* distinguished name and omit the {@code userFilter} option.
* Use authentication-only mode when the user's distinguished name is
* known in advance.
*
* <p> The following option is mandatory and must be specified in this
* module's login {@link Configuration}:
* <dl><dt></dt><dd>
* <dl><dd>
* <dl>
* <dt> <code>userProvider=<b>ldap_urls</b></code>
* </dt>
@ -106,7 +106,7 @@ import com.sun.security.auth.UserPrincipal;
* When several LDAP URLs are specified then each is attempted,
* in turn, until the first successful connection is established.
* Spaces in the distinguished name component of the URL must be escaped
* using the standard mechanism of percent character ('<code>%</code>')
* using the standard mechanism of percent character ('{@code %}')
* followed by two hexadecimal digits (see {@link java.net.URI}).
* Query components must also be omitted from the URL.
*
@ -120,33 +120,33 @@ import com.sun.security.auth.UserPrincipal;
*
* <p> This module also recognizes the following optional {@link Configuration}
* options:
* <dl><dt></dt><dd>
* <dl><dd>
* <dl>
* <dt> <code>userFilter=<b>ldap_filter</b></code> </dt>
* <dd> This option specifies the search filter to use to locate a user's
* entry in the LDAP directory. It is used to determine a user's
* distinguished name.
* <code><b>ldap_filter</b></code> is an LDAP filter string
* <b>{@code ldap_filter}</b> is an LDAP filter string
* (<a href="http://www.ietf.org/rfc/rfc2254.txt">RFC 2254</a>).
* If it contains the special token "<code><b>{USERNAME}</b></code>"
* If it contains the special token "<b>{@code {USERNAME}}</b>"
* then that token will be replaced with the supplied username value
* before the filter is used to search the directory. </dd>
*
* <dt> <code>authIdentity=<b>auth_id</b></code> </dt>
* <dd> This option specifies the identity to use when authenticating a user
* to the LDAP directory.
* <code><b>auth_id</b></code> may be an LDAP distinguished name string
* <b>{@code auth_id}</b> may be an LDAP distinguished name string
* (<a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>) or some
* other string name.
* It must contain the special token "<code><b>{USERNAME}</b></code>"
* It must contain the special token "<b>{@code {USERNAME}}</b>"
* which will be replaced with the supplied username value before the
* name is used for authentication.
* Note that if this option does not contain a distinguished name then
* the <code>userFilter</code> option must also be specified. </dd>
* the {@code userFilter} option must also be specified. </dd>
*
* <dt> <code>authzIdentity=<b>authz_id</b></code> </dt>
* <dd> This option specifies an authorization identity for the user.
* <code><b>authz_id</b></code> is any string name.
* <b>{@code authz_id}</b> is any string name.
* If it comprises a single special token with curly braces then
* that token is treated as a attribute name and will be replaced with a
* single value of that attribute from the user's LDAP entry.
@ -156,23 +156,23 @@ import com.sun.security.auth.UserPrincipal;
* is created using the authorization identity and it is associated with
* the current {@link Subject}. </dd>
*
* <dt> <code>useSSL</code> </dt>
* <dd> if <code>false</code>, this module does not establish an SSL connection
* <dt> {@code useSSL} </dt>
* <dd> if {@code false}, this module does not establish an SSL connection
* to the LDAP server before attempting authentication. SSL is used to
* protect the privacy of the user's password because it is transmitted
* in the clear over LDAP.
* By default, this module uses SSL. </dd>
*
* <dt> <code>useFirstPass</code> </dt>
* <dd> if <code>true</code>, this module retrieves the username and password
* <dt> {@code useFirstPass} </dt>
* <dd> if {@code true}, this module retrieves the username and password
* from the module's shared state, using "javax.security.auth.login.name"
* and "javax.security.auth.login.password" as the respective keys. The
* retrieved values are used for authentication. If authentication fails,
* no attempt for a retry is made, and the failure is reported back to
* the calling application.</dd>
*
* <dt> <code>tryFirstPass</code> </dt>
* <dd> if <code>true</code>, this module retrieves the username and password
* <dt> {@code tryFirstPass} </dt>
* <dd> if {@code true}, this module retrieves the username and password
* from the module's shared state, using "javax.security.auth.login.name"
* and "javax.security.auth.login.password" as the respective keys. The
* retrieved values are used for authentication. If authentication fails,
@ -181,8 +181,8 @@ import com.sun.security.auth.UserPrincipal;
* authentication fails, the failure is reported back to the calling
* application.</dd>
*
* <dt> <code>storePass</code> </dt>
* <dd> if <code>true</code>, this module stores the username and password
* <dt> {@code storePass} </dt>
* <dd> if {@code true}, this module stores the username and password
* obtained from the {@link CallbackHandler} in the module's shared state,
* using
* "javax.security.auth.login.name" and
@ -190,13 +190,13 @@ import com.sun.security.auth.UserPrincipal;
* not performed if existing values already exist for the username and
* password in the shared state, or if authentication fails.</dd>
*
* <dt> <code>clearPass</code> </dt>
* <dd> if <code>true</code>, this module clears the username and password
* <dt> {@code clearPass} </dt>
* <dd> if {@code true}, this module clears the username and password
* stored in the module's shared state after both phases of authentication
* (login and commit) have completed.</dd>
*
* <dt> <code>debug</code> </dt>
* <dd> if <code>true</code>, debug messages are displayed on the standard
* <dt> {@code debug} </dt>
* <dd> if {@code true}, debug messages are displayed on the standard
* output stream.
* </dl>
* </dl>
@ -209,36 +209,36 @@ import com.sun.security.auth.UserPrincipal;
* Note that the following four JNDI properties are set by this module directly
* and are ignored if also present in the configuration:
* <ul>
* <li> <code>java.naming.provider.url</code>
* <li> <code>java.naming.security.principal</code>
* <li> <code>java.naming.security.credentials</code>
* <li> <code>java.naming.security.protocol</code>
* <li> {@code java.naming.provider.url}
* <li> {@code java.naming.security.principal}
* <li> {@code java.naming.security.credentials}
* <li> {@code java.naming.security.protocol}
* </ul>
*
* <p>
* Three sample {@link Configuration}s are shown below.
* The first one activates search-first mode. It identifies the LDAP server
* and specifies that users' entries be located by their <code>uid</code> and
* <code>objectClass</code> attributes. It also specifies that an identity
* based on the user's <code>employeeNumber</code> attribute should be created.
* and specifies that users' entries be located by their {@code uid} and
* {@code objectClass} attributes. It also specifies that an identity
* based on the user's {@code employeeNumber} attribute should be created.
* The second one activates authentication-first mode. It requests that the
* LDAP server be located dynamically, that authentication be performed using
* the supplied username directly but without the protection of SSL and that
* users' entries be located by one of three naming attributes and their
* <code>objectClass</code> attribute.
* {@code objectClass} attribute.
* The third one activates authentication-only mode. It identifies alternative
* LDAP servers, it specifies the distinguished name to use for
* authentication and a fixed identity to use for authorization. No directory
* search is performed.
*
* <pre>
* <pre>{@literal
*
* ExampleApplication {
* com.sun.security.auth.module.LdapLoginModule REQUIRED
* userProvider="ldap://ldap-svr/ou=people,dc=example,dc=com"
* userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
* authzIdentity="{EMPLOYEENUMBER}"
* debug=true;
* userProvider="ldap://ldap-svr/ou=people,dc=example,dc=com"
* userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
* authzIdentity="{EMPLOYEENUMBER}"
* debug=true;
* };
*
* ExampleApplication {
@ -258,7 +258,7 @@ import com.sun.security.auth.UserPrincipal;
* debug=true;
* };
*
* </pre>
* }</pre>
*
* <dl>
* <dt><b>Note:</b> </dt>
@ -282,7 +282,6 @@ import com.sun.security.auth.UserPrincipal;
* <em>caller-specified</em> {@link Configuration} then the application
* must be granted the permissions required by the {@link LoginModule}.
* <em>This</em> module requires the following two permissions:
* <p>
* <ul>
* <li> The {@link SocketPermission} to connect to an LDAP server.
* <li> The {@link AuthPermission} to modify the set of {@link Principal}s
@ -373,15 +372,15 @@ public class LdapLoginModule implements LoginModule {
private SearchControls constraints = null;
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* @param subject the <code>Subject</code> to be authenticated.
* @param callbackHandler a <code>CallbackHandler</code> to acquire the
* @param subject the {@code Subject} to be authenticated.
* @param callbackHandler a {@code CallbackHandler} to acquire the
* username and password.
* @param sharedState shared <code>LoginModule</code> state.
* @param sharedState shared {@code LoginModule} state.
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
// Unchecked warning from (Map<String, Object>)sharedState is safe
// since javax.security.auth.login.LoginContext passes a raw HashMap.
@ -492,10 +491,10 @@ public class LdapLoginModule implements LoginModule {
* <p> Acquire the user's credentials and verify them against the
* specified LDAP directory.
*
* @return true always, since this <code>LoginModule</code>
* @return true always, since this {@code LoginModule}
* should not be ignored.
* @exception FailedLoginException if the authentication fails.
* @exception LoginException if this <code>LoginModule</code>
* @exception LoginException if this {@code LoginModule}
* is unable to perform the authentication.
*/
public boolean login() throws LoginException {
@ -593,10 +592,10 @@ public class LdapLoginModule implements LoginModule {
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> method), then this method associates an
* <code>LdapPrincipal</code> and one or more <code>UserPrincipal</code>s
* with the <code>Subject</code> located in the
* <code>LoginModule</code>. If this LoginModule's own
* {@code login} method), then this method associates an
* {@code LdapPrincipal} and one or more {@code UserPrincipal}s
* with the {@code Subject} located in the
* {@code LoginModule}. If this LoginModule's own
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
@ -662,7 +661,7 @@ public class LdapLoginModule implements LoginModule {
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> and <code>commit</code> methods),
* {@code login} and {@code commit} methods),
* then this method cleans up any state that was originally saved.
*
* @exception LoginException if the abort fails.
@ -697,10 +696,10 @@ public class LdapLoginModule implements LoginModule {
* Logout a user.
*
* <p> This method removes the Principals
* that were added by the <code>commit</code> method.
* that were added by the {@code commit} method.
*
* @exception LoginException if the logout fails.
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*/
public boolean logout() throws LoginException {

View File

@ -41,10 +41,10 @@ import com.sun.security.auth.NTSidGroupPrincipal;
import com.sun.security.auth.NTNumericCredential;
/**
* <p> This <code>LoginModule</code>
* This {@code LoginModule}
* renders a user's NT security information as some number of
* <code>Principal</code>s
* and associates them with a <code>Subject</code>.
* {@code Principal}s
* and associates them with a {@code Subject}.
*
* <p> This LoginModule recognizes the debug option.
* If set to true in the login Configuration,
@ -85,23 +85,21 @@ public class NTLoginModule implements LoginModule {
private NTNumericCredential iToken; // impersonation token
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param subject the <code>Subject</code> to be authenticated. <p>
*
* @param callbackHandler a <code>CallbackHandler</code> for communicating
* @param callbackHandler a {@code CallbackHandler} for communicating
* with the end user (prompting for usernames and
* passwords, for example). This particular LoginModule only
* extracts the underlying NT system information, so this
* parameter is ignored.<p>
* parameter is ignored.
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String,?> sharedState,
@ -125,14 +123,12 @@ public class NTLoginModule implements LoginModule {
/**
* Import underlying NT system identity information.
*
* <p>
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*
* @exception FailedLoginException if the authentication fails. <p>
* @exception FailedLoginException if the authentication fails.
*
* @exception LoginException if this <code>LoginModule</code>
* @exception LoginException if this {@code LoginModule}
* is unable to perform the authentication.
*/
public boolean login() throws LoginException {
@ -221,22 +217,20 @@ public class NTLoginModule implements LoginModule {
}
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication succeeded
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
* succeeded).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> method), then this method associates some
* number of various <code>Principal</code>s
* with the <code>Subject</code> located in the
* <code>LoginModuleContext</code>. If this LoginModule's own
* {@code login} method), then this method associates some
* number of various {@code Principal}s
* with the {@code Subject} located in the
* {@code LoginModuleContext}. If this LoginModule's own
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails.
*
* @return true if this LoginModule's own login and commit
@ -290,18 +284,16 @@ public class NTLoginModule implements LoginModule {
/**
* <p> This method is called if the LoginContext's
* This method is called if the LoginContext's
* overall authentication failed.
* (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
* did not succeed).
*
* <p> If this LoginModule's own authentication attempt
* succeeded (checked by retrieving the private state saved by the
* <code>login</code> and <code>commit</code> methods),
* {@code login} and {@code commit} methods),
* then this method cleans up any state that was originally saved.
*
* <p>
*
* @exception LoginException if the abort fails.
*
* @return false if this LoginModule's own login and/or commit attempts
@ -336,17 +328,15 @@ public class NTLoginModule implements LoginModule {
/**
* Logout the user.
*
* <p> This method removes the <code>NTUserPrincipal</code>,
* <code>NTDomainPrincipal</code>, <code>NTSidUserPrincipal</code>,
* <code>NTSidDomainPrincipal</code>, <code>NTSidGroupPrincipal</code>s,
* and <code>NTSidPrimaryGroupPrincipal</code>
* that may have been added by the <code>commit</code> method.
*
* <p>
* <p> This method removes the {@code NTUserPrincipal},
* {@code NTDomainPrincipal}, {@code NTSidUserPrincipal},
* {@code NTSidDomainPrincipal}, {@code NTSidGroupPrincipal}s,
* and {@code NTSidPrimaryGroupPrincipal}
* that may have been added by the {@code commit} method.
*
* @exception LoginException if the logout fails.
*
* @return true in all cases since this <code>LoginModule</code>
* @return true in all cases since this {@code LoginModule}
* should not be ignored.
*/
public boolean logout() throws LoginException {

View File

@ -26,7 +26,7 @@
package com.sun.security.auth.module;
/**
* <p> This class implementation retrieves and makes available NT
* This class implementation retrieves and makes available NT
* security information for the current user.
*
*/
@ -45,7 +45,7 @@ public class NTSystem {
private long impersonationToken;
/**
* Instantiate an <code>NTSystem</code> and load
* Instantiate an {@code NTSystem} and load
* the native library to access the underlying system information.
*/
public NTSystem() {
@ -53,7 +53,7 @@ public class NTSystem {
}
/**
* Instantiate an <code>NTSystem</code> and load
* Instantiate an {@code NTSystem} and load
* the native library to access the underlying system information.
*/
NTSystem(boolean debug) {
@ -64,8 +64,6 @@ public class NTSystem {
/**
* Get the username for the current NT user.
*
* <p>
*
* @return the username for the current NT user.
*/
public String getName() {
@ -75,8 +73,6 @@ public class NTSystem {
/**
* Get the domain for the current NT user.
*
* <p>
*
* @return the domain for the current NT user.
*/
public String getDomain() {
@ -86,8 +82,6 @@ public class NTSystem {
/**
* Get a printable SID for the current NT user's domain.
*
* <p>
*
* @return a printable SID for the current NT user's domain.
*/
public String getDomainSID() {
@ -97,8 +91,6 @@ public class NTSystem {
/**
* Get a printable SID for the current NT user.
*
* <p>
*
* @return a printable SID for the current NT user.
*/
public String getUserSID() {
@ -108,8 +100,6 @@ public class NTSystem {
/**
* Get a printable primary group SID for the current NT user.
*
* <p>
*
* @return the primary group SID for the current NT user.
*/
public String getPrimaryGroupID() {
@ -119,8 +109,6 @@ public class NTSystem {
/**
* Get the printable group SIDs for the current NT user.
*
* <p>
*
* @return the group SIDs for the current NT user.
*/
public String[] getGroupIDs() {
@ -130,8 +118,6 @@ public class NTSystem {
/**
* Get an impersonation token for the current NT user.
*
* <p>
*
* @return an impersonation token for the current NT user.
*/
public synchronized long getImpersonationToken() {

View File

@ -36,17 +36,17 @@ import com.sun.security.auth.SolarisNumericUserPrincipal;
import com.sun.security.auth.SolarisNumericGroupPrincipal;
/**
* <p> This <code>LoginModule</code> imports a user's Solaris
* <code>Principal</code> information (<code>SolarisPrincipal</code>,
* <code>SolarisNumericUserPrincipal</code>,
* and <code>SolarisNumericGroupPrincipal</code>)
* and associates them with the current <code>Subject</code>.
* This {@code LoginModule} imports a user's Solaris
* {@code Principal} information ({@code SolarisPrincipal},
* {@code SolarisNumericUserPrincipal},
* and {@code SolarisNumericGroupPrincipal})
* and associates them with the current {@code Subject}.
*
* <p> This LoginModule recognizes the debug option.
* If set to true in the login Configuration,
* debug messages will be output to the output stream, System.out.
* @deprecated As of JDK1.4, replaced by
* <code>com.sun.security.auth.module.UnixLoginModule</code>.
* {@code com.sun.security.auth.module.UnixLoginModule}.
* This LoginModule is entirely deprecated and
* is here to allow for a smooth transition to the new
* UnixLoginModule.
@ -80,21 +80,19 @@ public class SolarisLoginModule implements LoginModule {
new LinkedList<>();
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param subject the <code>Subject</code> to be authenticated. <p>
*
* @param callbackHandler a <code>CallbackHandler</code> for communicating
* @param callbackHandler a {@code CallbackHandler} for communicating
* with the end user (prompting for usernames and
* passwords, for example). <p>
* passwords, for example).
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String,?> sharedState,
@ -114,15 +112,13 @@ public class SolarisLoginModule implements LoginModule {
* Authenticate the user (first phase).
*
* <p> The implementation of this method attempts to retrieve the user's
* Solaris <code>Subject</code> information by making a native Solaris
* Solaris {@code Subject} information by making a native Solaris
* system call.
*
* <p>
*
* @exception FailedLoginException if attempts to retrieve the underlying
* system information fail.
*
* @return true in all cases (this <code>LoginModule</code>
* @return true in all cases (this {@code LoginModule}
* should not be ignored).
*/
public boolean login() throws LoginException {
@ -175,13 +171,11 @@ public class SolarisLoginModule implements LoginModule {
* <p> If this LoginModule's own authentication attempt
* succeeded (the importing of the Solaris authentication information
* succeeded), then this method associates the Solaris Principals
* with the <code>Subject</code> currently tied to the
* <code>LoginModule</code>. If this LoginModule's
* with the {@code Subject} currently tied to the
* {@code LoginModule}. If this LoginModule's
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails
*
* @return true if this LoginModule's own login and commit attempts
@ -232,10 +226,8 @@ public class SolarisLoginModule implements LoginModule {
* did not succeed).
*
* <p> This method cleans up any state that was originally saved
* as part of the authentication attempt from the <code>login</code>
* and <code>commit</code> methods.
*
* <p>
* as part of the authentication attempt from the {@code login}
* and {@code commit} methods.
*
* @exception LoginException if the abort fails
*
@ -272,13 +264,11 @@ public class SolarisLoginModule implements LoginModule {
* Logout the user
*
* <p> This method removes the Principals associated
* with the <code>Subject</code>.
*
* <p>
* with the {@code Subject}.
*
* @exception LoginException if the logout fails
*
* @return true in all cases (this <code>LoginModule</code>
* @return true in all cases (this {@code LoginModule}
* should not be ignored).
*/
public boolean logout() throws LoginException {

View File

@ -26,7 +26,7 @@
package com.sun.security.auth.module;
/**
* <p> This class implementation retrieves and makes available Solaris
* This class implementation retrieves and makes available Solaris
* UID/GID/groups information for the current user.
*
* @deprecated replaced by {@link UnixSystem}.
@ -43,7 +43,7 @@ public class SolarisSystem {
protected long[] groups;
/**
* Instantiate a <code>SolarisSystem</code> and load
* Instantiate a {@code SolarisSystem} and load
* the native library to access the underlying system information.
*/
public SolarisSystem() {
@ -54,8 +54,6 @@ public class SolarisSystem {
/**
* Get the username for the current Solaris user.
*
* <p>
*
* @return the username for the current Solaris user.
*/
public String getUsername() {
@ -65,8 +63,6 @@ public class SolarisSystem {
/**
* Get the UID for the current Solaris user.
*
* <p>
*
* @return the UID for the current Solaris user.
*/
public long getUid() {
@ -76,8 +72,6 @@ public class SolarisSystem {
/**
* Get the GID for the current Solaris user.
*
* <p>
*
* @return the GID for the current Solaris user.
*/
public long getGid() {
@ -87,8 +81,6 @@ public class SolarisSystem {
/**
* Get the supplementary groups for the current Solaris user.
*
* <p>
*
* @return the supplementary groups for the current Solaris user.
*/
public long[] getGroups() {

View File

@ -36,11 +36,11 @@ import com.sun.security.auth.UnixNumericUserPrincipal;
import com.sun.security.auth.UnixNumericGroupPrincipal;
/**
* <p> This <code>LoginModule</code> imports a user's Unix
* <code>Principal</code> information (<code>UnixPrincipal</code>,
* <code>UnixNumericUserPrincipal</code>,
* and <code>UnixNumericGroupPrincipal</code>)
* and associates them with the current <code>Subject</code>.
* This {@code LoginModule} imports a user's Unix
* {@code Principal} information ({@code UnixPrincipal},
* {@code UnixNumericUserPrincipal},
* and {@code UnixNumericGroupPrincipal})
* and associates them with the current {@code Subject}.
*
* <p> This LoginModule recognizes the debug option.
* If set to true in the login Configuration,
@ -74,21 +74,19 @@ public class UnixLoginModule implements LoginModule {
new LinkedList<>();
/**
* Initialize this <code>LoginModule</code>.
* Initialize this {@code LoginModule}.
*
* <p>
* @param subject the {@code Subject} to be authenticated.
*
* @param subject the <code>Subject</code> to be authenticated. <p>
*
* @param callbackHandler a <code>CallbackHandler</code> for communicating
* @param callbackHandler a {@code CallbackHandler} for communicating
* with the end user (prompting for usernames and
* passwords, for example). <p>
* passwords, for example).
*
* @param sharedState shared <code>LoginModule</code> state. <p>
* @param sharedState shared {@code LoginModule} state.
*
* @param options options specified in the login
* <code>Configuration</code> for this particular
* <code>LoginModule</code>.
* {@code Configuration} for this particular
* {@code LoginModule}.
*/
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String,?> sharedState,
@ -107,15 +105,13 @@ public class UnixLoginModule implements LoginModule {
* Authenticate the user (first phase).
*
* <p> The implementation of this method attempts to retrieve the user's
* Unix <code>Subject</code> information by making a native Unix
* Unix {@code Subject} information by making a native Unix
* system call.
*
* <p>
*
* @exception FailedLoginException if attempts to retrieve the underlying
* system information fail.
*
* @return true in all cases (this <code>LoginModule</code>
* @return true in all cases (this {@code LoginModule}
* should not be ignored).
*/
public boolean login() throws LoginException {
@ -169,13 +165,11 @@ public class UnixLoginModule implements LoginModule {
* <p> If this LoginModule's own authentication attempt
* succeeded (the importing of the Unix authentication information
* succeeded), then this method associates the Unix Principals
* with the <code>Subject</code> currently tied to the
* <code>LoginModule</code>. If this LoginModule's
* with the {@code Subject} currently tied to the
* {@code LoginModule}. If this LoginModule's
* authentication attempted failed, then this method removes
* any state that was originally saved.
*
* <p>
*
* @exception LoginException if the commit fails
*
* @return true if this LoginModule's own login and commit attempts
@ -228,10 +222,8 @@ public class UnixLoginModule implements LoginModule {
* did not succeed).
*
* <p> This method cleans up any state that was originally saved
* as part of the authentication attempt from the <code>login</code>
* and <code>commit</code> methods.
*
* <p>
* as part of the authentication attempt from the {@code login}
* and {@code commit} methods.
*
* @exception LoginException if the abort fails
*
@ -267,13 +259,11 @@ public class UnixLoginModule implements LoginModule {
* Logout the user
*
* <p> This method removes the Principals associated
* with the <code>Subject</code>.
*
* <p>
* with the {@code Subject}.
*
* @exception LoginException if the logout fails
*
* @return true in all cases (this <code>LoginModule</code>
* @return true in all cases (this {@code LoginModule}
* should not be ignored).
*/
public boolean logout() throws LoginException {

View File

@ -26,9 +26,8 @@
package com.sun.security.auth.module;
/**
* <p> This class implementation retrieves and makes available Unix
* This class implementation retrieves and makes available Unix
* UID/GID/groups information for the current user.
*
*/
@jdk.Exported
public class UnixSystem {
@ -41,7 +40,7 @@ public class UnixSystem {
protected long[] groups;
/**
* Instantiate a <code>UnixSystem</code> and load
* Instantiate a {@code UnixSystem} and load
* the native library to access the underlying system information.
*/
public UnixSystem() {
@ -52,8 +51,6 @@ public class UnixSystem {
/**
* Get the username for the current Unix user.
*
* <p>
*
* @return the username for the current Unix user.
*/
public String getUsername() {
@ -63,8 +60,6 @@ public class UnixSystem {
/**
* Get the UID for the current Unix user.
*
* <p>
*
* @return the UID for the current Unix user.
*/
public long getUid() {
@ -74,8 +69,6 @@ public class UnixSystem {
/**
* Get the GID for the current Unix user.
*
* <p>
*
* @return the GID for the current Unix user.
*/
public long getGid() {
@ -85,8 +78,6 @@ public class UnixSystem {
/**
* Get the supplementary groups for the current Unix user.
*
* <p>
*
* @return the supplementary groups for the current Unix user.
*/
public long[] getGroups() {

View File

@ -41,7 +41,12 @@ public class LotsOfOutput {
long initMemory = Runtime.getRuntime().totalMemory();
for (int i=1; i< 10; i++) {
Thread.sleep(100);
if (Runtime.getRuntime().totalMemory() > initMemory + 1000000)
long totalMemory = Runtime.getRuntime().totalMemory();
if (totalMemory != initMemory) {
System.out.printf("consuming memory: i: %d, initial: %d, total: %d, delta: %d%n",
i, initMemory, totalMemory, totalMemory - initMemory);
}
if (totalMemory > initMemory + 1000000)
throw new Exception("Process consumes memory.");
}

View File

@ -107,8 +107,6 @@ import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.time.Clock;
import java.time.DateTimeException;
import java.time.DayOfWeek;
@ -260,16 +258,17 @@ public class TCKLocalDateTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Test(timeOut=30000) // TODO: remove when time zone loading is faster
public void now() {
final long DELTA = 20_000_000_000L; // 20 seconds of nanos leeway
LocalDateTime expected = LocalDateTime.now(Clock.systemDefaultZone());
LocalDateTime test = LocalDateTime.now();
long diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
if (diff >= 100000000) {
if (diff >= DELTA) {
// may be date change
expected = LocalDateTime.now(Clock.systemDefaultZone());
test = LocalDateTime.now();
diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
}
assertTrue(diff < 100000000); // less than 0.1 secs
assertTrue(diff < DELTA);
}
//-----------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -104,8 +104,6 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.time.Clock;
@ -235,16 +233,17 @@ public class TCKOffsetDateTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Test
public void now() {
final long DELTA = 20_000_000_000L; // 20 seconds of nanos leeway
OffsetDateTime expected = OffsetDateTime.now(Clock.systemDefaultZone());
OffsetDateTime test = OffsetDateTime.now();
long diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
if (diff >= 100000000) {
if (diff >= DELTA) {
// may be date change
expected = OffsetDateTime.now(Clock.systemDefaultZone());
test = OffsetDateTime.now();
diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
}
assertTrue(diff < 100000000); // less than 0.1 secs
assertTrue(diff < DELTA);
}
//-----------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -89,8 +89,6 @@ import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.time.Clock;
@ -202,12 +200,19 @@ public class TCKOffsetTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Test
public void now() {
final long DELTA = 20_000_000_000L; // 20 seconds of nanos leeway
ZonedDateTime nowDT = ZonedDateTime.now();
OffsetTime expected = OffsetTime.now(Clock.systemDefaultZone());
OffsetTime test = OffsetTime.now();
long diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
assertTrue(diff < 100000000); // less than 0.1 secs
if (diff >= DELTA) {
// may be date change
expected = OffsetTime.now(Clock.systemDefaultZone());
test = OffsetTime.now();
diff = Math.abs(test.toLocalTime().toNanoOfDay() - expected.toLocalTime().toNanoOfDay());
}
assertTrue(diff < DELTA);
assertEquals(test.getOffset(), nowDT.getOffset());
}

View File

@ -26,9 +26,8 @@ import java.util.prefs.PreferencesFactory;
/*
* @test
* @bug 8068373
* @requires os.family == "linux" | os.family == "solaris"
* @summary Ensure writing a code point U+0000 null control character is detected.
* @bug 8068373 8075110 8075156
* @summary Ensure a code point U+0000 null control character is detected.
*/
public class CodePointZeroPrefsTest
{
@ -36,52 +35,70 @@ public class CodePointZeroPrefsTest
{
int failures = 0;
// Deliberately reflect so you can reproduce it on any platform.
Constructor<? extends PreferencesFactory> constructor =
Class.forName("java.util.prefs.FileSystemPreferencesFactory").asSubclass(PreferencesFactory.class).getDeclaredConstructor();
constructor.setAccessible(true);
PreferencesFactory factory = constructor.newInstance();
Preferences node = Preferences.userRoot().node("com/acme/testing");
Preferences node = factory.userRoot().node("com/acme/testing");
// --- put() ---
// legal key and value
try {
node.put("a", "1");
} catch (IllegalArgumentException iae) {
System.err.println("Unexpected IllegalArgumentException for legal key");
System.err.println("Unexpected IllegalArgumentException for legal put() key");
failures++;
}
// illegal key only
int numIAEs = 0;
try {
node.put("a\u0000b", "1");
System.err.println("IllegalArgumentException not thrown for illegal key");
System.err.println("IllegalArgumentException not thrown for illegal put() key");
failures++;
} catch (IllegalArgumentException iae) {
// do nothing
}
// illegal value only
numIAEs = 0;
try {
node.put("ab", "2\u00003");
System.err.println("IllegalArgumentException not thrown for illegal value");
System.err.println("IllegalArgumentException not thrown for illegal put() value");
failures++;
} catch (IllegalArgumentException iae) {
// do nothing
}
// illegal key and value
numIAEs = 0;
try {
node.put("a\u0000b", "2\u00003");
System.err.println("IllegalArgumentException not thrown for illegal entry");
System.err.println("IllegalArgumentException not thrown for illegal put() entry");
failures++;
} catch (IllegalArgumentException iae) {
// do nothing
}
// --- get ---
// illegal key only
try {
String theDefault = "default";
String value = node.get("a\u0000b", theDefault);
System.err.println("IllegalArgumentException not thrown for illegal get() key");
failures++;
} catch (IllegalArgumentException iae) {
// do nothing
}
// --- remove ---
// illegal key only
try {
node.remove("a\u0000b");
System.err.println("IllegalArgumentException not thrown for illegal remove() key");
failures++;
} catch (IllegalArgumentException iae) {
// do nothing
}
node.removeNode();
if (failures != 0) {
throw new RuntimeException("CodePointZeroPrefsTest failed with "
+ failures + " errors!");

View File

@ -28,6 +28,7 @@
# @bug 6753664
# @run shell SignUsingSHA2withRSA.sh
# @summary Support SHA256 (and higher) in SunMSCAPI
# @key intermittent
# set a few environment variables so that the shell-script can run stand-alone
# in the source directory

View File

@ -28,6 +28,7 @@
* @author Andreas Sterbenz
* @library ..
* @run main/othervm TestKeyPairGenerator
* @key intermittent
*/
import java.io.*;