Index: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/User.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/User.java	(revision 1614817)
+++ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/User.java	(revision )
@@ -34,6 +34,11 @@
     boolean isAdmin();
 
     /**
+     * @return true if the current user represents a system user.
+     */
+    boolean isSystemUser();
+
+    /**
      * Returns the internal <code>Credentials</code> representation for this
      * user. This method is expected to be used for validation during the
      * login process. However, the return value should neither be usable nor
Index: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/UserManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/UserManager.java	(revision 1614817)
+++ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/UserManager.java	(revision )
@@ -180,6 +180,30 @@
     User createUser(String userID, String password, Principal principal,
                     String intermediatePath) throws AuthorizableExistsException, RepositoryException;
 
+
+    /**
+     * Create a new system user for the specified {@code userID}. The new authorizable
+     * is required to have the following characteristics:
+     *
+     * <ul>
+     *     <li>{@link org.apache.jackrabbit.api.security.user.User#isSystemUser()} returns {@code true}.</li>
+     *     <li>The principal name is generated by the system; it may be the same as {@code userID}.</li>
+     *     <li>A given implementation may choose to keep system users in a dedicated
+     *     location and thus may impose restrictions on the {@code intermediatePath}.</li>
+     * </ul>
+     *
+     * @param userID A valid userID.
+     * @param intermediatePath An optional intermediate path to create the new
+     * system user. The implemenation may decide to reject intermediate paths
+     * if they violate an implementation specific requirement with respect to
+     * the location where systems users are being held. If the intermediate path
+     * is {@code null} an internal implementation specific structure will be used.
+     * @return The new system user.
+     * @throws AuthorizableExistsException if an Authorizable with this id already exists.
+     * @throws RepositoryException If another error occurs.
+     */
+    User createSystemUser(String userID, String intermediatePath) throws AuthorizableExistsException, RepositoryException;
+
     /**
      * Creates a Group for the given groupID, which must not be <code>null</code>.
      * <br>
