#gg-9809: GridOsSecurityProcessor throws UnsupportedOperationException.

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/b387122e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/b387122e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/b387122e

Branch: refs/heads/sprint-2
Commit: b387122e88340d12c6670710f8f6eaded6dba6e3
Parents: 1b3da57
Author: ivasilinets <ivasilin...@gridgain.com>
Authored: Wed Feb 18 16:25:15 2015 +0300
Committer: ivasilinets <ivasilin...@gridgain.com>
Committed: Wed Feb 18 16:25:15 2015 +0300

----------------------------------------------------------------------
 .../processors/rest/GridRestProcessor.java      |  26 +-
 .../security/os/GridOsSecurityProcessor.java    | 146 +---------
 .../security/os/SecurityContextImpl.java        | 282 -------------------
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 134 ++++-----
 .../ignite/testframework/junits/IgniteMock.java |   1 -
 5 files changed, 88 insertions(+), 501 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b387122e/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index 3d834fb..51f8abe 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -161,22 +161,24 @@ public class GridRestProcessor extends 
GridProcessorAdapter {
         if (log.isDebugEnabled())
             log.debug("Received request from client: " + req);
 
-        SecurityContext subjCtx = null;
+        if (ctx.security().enabled()) {
+            SecurityContext subjCtx = null;
 
-        try {
-            subjCtx = authenticate(req);
+            try {
+                subjCtx = authenticate(req);
 
-            authorize(req, subjCtx);
-        }
-        catch (GridSecurityException e) {
-            assert subjCtx != null;
+                authorize(req, subjCtx);
+            }
+            catch (GridSecurityException e) {
+                assert subjCtx != null;
 
-            GridRestResponse res = new 
GridRestResponse(STATUS_SECURITY_CHECK_FAILED, e.getMessage());
+                GridRestResponse res = new 
GridRestResponse(STATUS_SECURITY_CHECK_FAILED, e.getMessage());
 
-            return new GridFinishedFuture<>(ctx, res);
-        }
-        catch (IgniteCheckedException e) {
-            return new GridFinishedFuture<>(ctx, new 
GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
+                return new GridFinishedFuture<>(ctx, res);
+            }
+            catch (IgniteCheckedException e) {
+                return new GridFinishedFuture<>(ctx, new 
GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
+            }
         }
 
         interceptRequest(req);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b387122e/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java
index 8366b77..4a8c53b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java
@@ -22,13 +22,9 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.processors.*;
 import org.apache.ignite.internal.processors.security.*;
-import org.apache.ignite.internal.util.tostring.*;
-import org.apache.ignite.internal.util.typedef.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.plugin.security.*;
 import org.jetbrains.annotations.*;
 
-import java.net.*;
 import java.util.*;
 
 /**
@@ -42,65 +38,25 @@ public class GridOsSecurityProcessor extends 
GridProcessorAdapter implements Gri
         super(ctx);
     }
 
-    /** Allow all permissions. */
-    private static final GridSecurityPermissionSet ALLOW_ALL = new 
GridSecurityPermissionSet() {
-        /** Serial version uid. */
-        private static final long serialVersionUID = 0L;
-
-        /** {@inheritDoc} */
-        @Override public boolean defaultAllowAll() {
-            return true;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Map<String, Collection<GridSecurityPermission>> 
taskPermissions() {
-            return Collections.emptyMap();
-        }
-
-        /** {@inheritDoc} */
-        @Override public Map<String, Collection<GridSecurityPermission>> 
cachePermissions() {
-            return Collections.emptyMap();
-        }
-
-        /** {@inheritDoc} */
-        @Nullable @Override public Collection<GridSecurityPermission> 
systemPermissions() {
-            return null;
-        }
-    };
-
     /** {@inheritDoc} */
     @Override public SecurityContext authenticateNode(ClusterNode node, 
GridSecurityCredentials cred)
         throws IgniteCheckedException {
-        GridSecuritySubjectAdapter s = new 
GridSecuritySubjectAdapter(GridSecuritySubjectType.REMOTE_NODE, node.id());
-
-        s.address(new InetSocketAddress(F.first(node.addresses()), 0));
-
-        s.permissions(ALLOW_ALL);
-
-        return new SecurityContextImpl(s);
+        throw new 
UnsupportedOperationException("GridOsSecurityProcessor.authenticateNode()");
     }
 
     /** {@inheritDoc} */
     @Override public boolean isGlobalNodeAuthentication() {
-        return false;
+        throw new 
UnsupportedOperationException("GridOsSecurityProcessor.isGlobalNodeAuthentication()");
     }
 
     /** {@inheritDoc} */
     @Override public SecurityContext authenticate(AuthenticationContext 
authCtx) throws IgniteCheckedException {
-        GridSecuritySubjectAdapter s = new 
GridSecuritySubjectAdapter(authCtx.subjectType(), authCtx.subjectId());
-
-        s.permissions(ALLOW_ALL);
-        s.address(authCtx.address());
-
-        if (authCtx.credentials() != null)
-            s.login(authCtx.credentials().getLogin());
-
-        return new SecurityContextImpl(s);
+        throw new 
UnsupportedOperationException("GridOsSecurityProcessor.authenticate()");
     }
 
     /** {@inheritDoc} */
     @Override public Collection<GridSecuritySubject> authenticatedSubjects() {
-        return Collections.emptyList();
+        throw new 
UnsupportedOperationException("GridOsSecurityProcessor.authenticatedSubjects()");
     }
 
     /** {@inheritDoc} */
@@ -116,7 +72,7 @@ public class GridOsSecurityProcessor extends 
GridProcessorAdapter implements Gri
 
     /** {@inheritDoc} */
     @Override public SecurityContext createSecurityContext(GridSecuritySubject 
subj) {
-        return new SecurityContextImpl(subj);
+        throw new 
UnsupportedOperationException("GridOsSecurityProcessor.createSecurityContext()");
     }
 
     /** {@inheritDoc} */
@@ -128,96 +84,4 @@ public class GridOsSecurityProcessor extends 
GridProcessorAdapter implements Gri
     @Override public boolean enabled() {
         return false;
     }
-
-     /**
-     * Authenticated security subject.
-     */
-     private class GridSecuritySubjectAdapter implements GridSecuritySubject {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /** Subject ID. */
-        private UUID id;
-
-        /** Subject type. */
-        private GridSecuritySubjectType subjType;
-
-        /** Address. */
-        private InetSocketAddress addr;
-
-        /** Permissions assigned to a subject. */
-        private GridSecurityPermissionSet permissions;
-
-        /** Login. */
-        @GridToStringInclude
-        private Object login;
-
-        /**
-         * @param subjType Subject type.
-         * @param id Subject ID.
-         */
-        public GridSecuritySubjectAdapter(GridSecuritySubjectType subjType, 
UUID id) {
-            this.subjType = subjType;
-            this.id = id;
-        }
-
-        /**
-         * @return Subject ID.
-         */
-        @Override public UUID id() {
-            return id;
-        }
-
-        /**
-         * @return Subject type.
-         */
-        @Override public GridSecuritySubjectType type() {
-            return subjType;
-        }
-
-        /**
-         * @return Subject address.
-         */
-        @Override public InetSocketAddress address() {
-            return addr;
-        }
-
-        /**
-         * @param addr Subject address.
-         */
-        public void address(InetSocketAddress addr) {
-            this.addr = addr;
-        }
-
-        /**
-         * @return Security permissions.
-         */
-        @Override public GridSecurityPermissionSet permissions() {
-            return permissions;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object login() {
-            return login;
-        }
-
-        /**
-         * @param login Login.
-         */
-        public void login(Object login) {
-            this.login = login;
-        }
-
-        /**
-         * @param permissions Permissions.
-         */
-        public void permissions(GridSecurityPermissionSet permissions) {
-            this.permissions = permissions;
-        }
-
-        /** {@inheritDoc} */
-        public String toString() {
-            return S.toString(GridSecuritySubjectAdapter.class, this);
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b387122e/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java
deleted file mode 100644
index 3e7484a..0000000
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.security.os;
-
-import org.apache.ignite.internal.processors.security.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.plugin.security.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * TODO: remove
- */
-public class SecurityContextImpl implements SecurityContext, Externalizable
-
-    {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /**
-         * Visor ignite tasks prefix.
-         */
-        private static final String VISOR_IGNITE_TASK_PREFIX = 
"org.apache.ignite.internal.visor.";
-
-        /**
-         * Visor gridgain tasks prefix.
-         */
-        private static final String VISOR_GRIDGAIN_TASK_PREFIX = 
"org.gridgain.grid.internal.visor.";
-
-        /**
-         * Cache query task name.
-         */
-        public static final String VISOR_CACHE_QUERY_TASK_NAME =
-            "org.apache.ignite.internal.visor.query.VisorQueryTask";
-
-        /**
-         * Cache load task name.
-         */
-        public static final String VISOR_CACHE_LOAD_TASK_NAME =
-            "org.apache.ignite.internal.visor.cache.VisorCacheLoadTask";
-
-        /**
-         * Cache clear task name.
-         */
-        public static final String VISOR_CACHE_CLEAR_TASK_NAME =
-            "org.apache.ignite.internal.visor.query.VisorQueryCleanupTask";
-
-        /**
-         * Security subject.
-         */
-        private GridSecuritySubject subj;
-
-        /**
-         * String task permissions.
-         */
-        private Map<String, Collection<GridSecurityPermission>> 
strictTaskPermissions = new LinkedHashMap<>();
-
-        /**
-         * String task permissions.
-         */
-        private Map<String, Collection<GridSecurityPermission>> 
wildcardTaskPermissions = new LinkedHashMap<>();
-
-        /**
-         * String task permissions.
-         */
-        private Map<String, Collection<GridSecurityPermission>> 
strictCachePermissions = new LinkedHashMap<>();
-
-        /**
-         * String task permissions.
-         */
-        private Map<String, Collection<GridSecurityPermission>> 
wildcardCachePermissions = new LinkedHashMap<>();
-
-        /**
-         * System-wide permissions.
-         */
-        private Collection<GridSecurityPermission> sysPermissions;
-
-        /**
-         * Empty constructor required by {@link Externalizable}.
-         */
-        public SecurityContextImpl() {
-        // No-op.
-    }
-
-        /**
-         * @param subj Subject.
-         */
-        public SecurityContextImpl(GridSecuritySubject subj) {
-        this.subj = subj;
-
-        initRules();
-    }
-
-        /**
-         * @return Security subject.
-         */
-    public GridSecuritySubject subject() {
-        return subj;
-    }
-
-    /**
-     * Checks whether task operation is allowed.
-     *
-     * @param taskClsName Task class name.
-     * @param perm        Permission to check.
-     * @return {@code True} if task operation is allowed.
-     */
-    public boolean taskOperationAllowed(String taskClsName, 
GridSecurityPermission perm) {
-        assert perm == GridSecurityPermission.TASK_EXECUTE || perm == 
GridSecurityPermission.TASK_CANCEL;
-
-        if (visorTask(taskClsName))
-            return visorTaskAllowed(taskClsName);
-
-        Collection<GridSecurityPermission> p = 
strictTaskPermissions.get(taskClsName);
-
-        if (p != null)
-            return p.contains(perm);
-
-        for (Map.Entry<String, Collection<GridSecurityPermission>> entry : 
wildcardTaskPermissions.entrySet()) {
-            if (taskClsName.startsWith(entry.getKey()))
-                return entry.getValue().contains(perm);
-        }
-
-        return subj.permissions().defaultAllowAll();
-    }
-
-    /**
-     * Checks whether cache operation is allowed.
-     *
-     * @param cacheName Cache name.
-     * @param perm      Permission to check.
-     * @return {@code True} if cache operation is allowed.
-     */
-    public boolean cacheOperationAllowed(String cacheName, 
GridSecurityPermission perm) {
-        assert perm == GridSecurityPermission.CACHE_PUT || perm == 
GridSecurityPermission.CACHE_READ ||
-            perm == GridSecurityPermission.CACHE_REMOVE;
-
-        Collection<GridSecurityPermission> p = 
strictCachePermissions.get(cacheName);
-
-        if (p != null)
-            return p.contains(perm);
-
-        for (Map.Entry<String, Collection<GridSecurityPermission>> entry : 
wildcardCachePermissions.entrySet()) {
-            if (cacheName != null) {
-                if (cacheName.startsWith(entry.getKey()))
-                    return entry.getValue().contains(perm);
-            } else {
-                // Match null cache to '*'
-                if (entry.getKey().isEmpty())
-                    return entry.getValue().contains(perm);
-            }
-        }
-
-        return subj.permissions().defaultAllowAll();
-    }
-
-    /**
-     * Checks whether system-wide permission is allowed (excluding Visor task 
operations).
-     *
-     * @param perm Permission to check.
-     * @return {@code True} if system operation is allowed.
-     */
-    public boolean systemOperationAllowed(GridSecurityPermission perm) {
-        if (sysPermissions == null)
-            return subj.permissions().defaultAllowAll();
-
-        boolean ret = sysPermissions.contains(perm);
-
-        if (!ret && (perm == GridSecurityPermission.EVENTS_ENABLE || perm == 
GridSecurityPermission.EVENTS_DISABLE))
-            ret = sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW);
-
-        return ret;
-    }
-
-    /**
-     * Checks if task is Visor task.
-     *
-     * @param taskCls Task class name.
-     * @return {@code True} if task is Visor task.
-     */
-    private boolean visorTask(String taskCls) {
-        return taskCls.startsWith(VISOR_IGNITE_TASK_PREFIX) || 
taskCls.startsWith(VISOR_GRIDGAIN_TASK_PREFIX);
-    }
-
-    /**
-     * Checks if Visor task is allowed for execution.
-     *
-     * @param taskName Task name.
-     * @return {@code True} if execution is allowed.
-     */
-    private boolean visorTaskAllowed(String taskName) {
-        if (sysPermissions == null)
-            return subj.permissions().defaultAllowAll();
-
-        switch (taskName) {
-            case VISOR_CACHE_QUERY_TASK_NAME:
-                return 
sysPermissions.contains(GridSecurityPermission.ADMIN_QUERY);
-            case VISOR_CACHE_LOAD_TASK_NAME:
-            case VISOR_CACHE_CLEAR_TASK_NAME:
-                return 
sysPermissions.contains(GridSecurityPermission.ADMIN_CACHE);
-            default:
-                return 
sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW);
-        }
-    }
-
-    /**
-     * Init rules.
-     */
-    private void initRules() {
-        GridSecurityPermissionSet permSet = subj.permissions();
-
-        for (Map.Entry<String, Collection<GridSecurityPermission>> entry : 
permSet.taskPermissions().entrySet()) {
-            String ptrn = entry.getKey();
-
-            Collection<GridSecurityPermission> vals = 
Collections.unmodifiableCollection(entry.getValue());
-
-            if (ptrn.endsWith("*")) {
-                String noWildcard = ptrn.substring(0, ptrn.length() - 1);
-
-                wildcardTaskPermissions.put(noWildcard, vals);
-            } else
-                strictTaskPermissions.put(ptrn, vals);
-        }
-
-        for (Map.Entry<String, Collection<GridSecurityPermission>> entry : 
permSet.cachePermissions().entrySet()) {
-            String ptrn = entry.getKey();
-
-            Collection<GridSecurityPermission> vals = 
Collections.unmodifiableCollection(entry.getValue());
-
-            if (ptrn != null && ptrn.endsWith("*")) {
-                String noWildcard = ptrn.substring(0, ptrn.length() - 1);
-
-                wildcardCachePermissions.put(noWildcard, vals);
-            } else
-                strictCachePermissions.put(ptrn, vals);
-        }
-
-        sysPermissions = permSet.systemPermissions();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(subj);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void readExternal(ObjectInput in) throws IOException, 
ClassNotFoundException {
-        subj = (GridSecuritySubject) in.readObject();
-
-        initRules();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String toString() {
-        return S.toString(SecurityContextImpl.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b387122e/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 8e9d372..0d4fb41 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1269,23 +1269,25 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
                 if (log.isDebugEnabled())
                     log.debug("Join request message has not been sent (local 
node is the first in the topology).");
 
-                // Authenticate local node.
-                try {
-                    SecurityContext subj = nodeAuth.authenticateNode(locNode, 
locCred);
+                if (((IgniteKernal)ignite).context().security().enabled()) {
+                    // Authenticate local node.
+                    try {
+                        SecurityContext subj = 
nodeAuth.authenticateNode(locNode, locCred);
 
-                    if (subj == null)
-                        throw new IgniteSpiException("Authentication failed 
for local node: " + locNode.id());
+                        if (subj == null)
+                            throw new IgniteSpiException("Authentication 
failed for local node: " + locNode.id());
 
-                    Map<String, Object> attrs = new 
HashMap<>(locNode.attributes());
+                        Map<String, Object> attrs = new 
HashMap<>(locNode.attributes());
 
-                    attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT,
-                        ignite.configuration().getMarshaller().marshal(subj));
-                    
attrs.remove(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS);
+                        attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT,
+                            
ignite.configuration().getMarshaller().marshal(subj));
+                        
attrs.remove(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS);
 
-                    locNode.setAttributes(attrs);
-                }
-                catch (IgniteException | IgniteCheckedException e) {
-                    throw new IgniteSpiException("Failed to authenticate local 
node (will shutdown local node).", e);
+                        locNode.setAttributes(attrs);
+                    }
+                    catch (IgniteException | IgniteCheckedException e) {
+                        throw new IgniteSpiException("Failed to authenticate 
local node (will shutdown local node).", e);
+                    }
                 }
 
                 locNode.order(1);
@@ -3062,51 +3064,25 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
                     return;
                 }
 
-                // Authenticate node first.
-                try {
-                    GridSecurityCredentials cred = unmarshalCredentials(node);
-
-                    SecurityContext subj = nodeAuth.authenticateNode(node, 
cred);
-
-                    if (subj == null) {
-                        // Node has not pass authentication.
-                        LT.warn(log, null,
-                            "Authentication failed [nodeId=" + node.id() +
-                                ", addrs=" + U.addressesAsString(node) + ']',
-                            "Authentication failed [nodeId=" + 
U.id8(node.id()) + ", addrs=" +
-                                U.addressesAsString(node) + ']');
-
-                        // Always output in debug.
-                        if (log.isDebugEnabled())
-                            log.debug("Authentication failed [nodeId=" + 
node.id() + ", addrs=" +
-                                U.addressesAsString(node));
+                if (((IgniteKernal)ignite).context().security().enabled()) {
+                    // Authenticate node first.
+                    try {
+                        GridSecurityCredentials cred = 
unmarshalCredentials(node);
 
-                        try {
-                            trySendMessageDirectly(node, new 
TcpDiscoveryAuthFailedMessage(locNodeId, locHost));
-                        }
-                        catch (IgniteSpiException e) {
-                            if (log.isDebugEnabled())
-                                log.debug("Failed to send unauthenticated 
message to node " +
-                                    "[node=" + node + ", err=" + 
e.getMessage() + ']');
-                        }
+                        SecurityContext subj = nodeAuth.authenticateNode(node, 
cred);
 
-                        // Ignore join request.
-                        return;
-                    }
-                    else {
-                        if (!(subj instanceof Serializable)) {
+                        if (subj == null) {
                             // Node has not pass authentication.
                             LT.warn(log, null,
-                                "Authentication subject is not Serializable 
[nodeId=" + node.id() +
+                                "Authentication failed [nodeId=" + node.id() +
                                     ", addrs=" + U.addressesAsString(node) + 
']',
-                                "Authentication subject is not Serializable 
[nodeId=" + U.id8(node.id()) +
-                                    ", addrs=" +
+                                "Authentication failed [nodeId=" + 
U.id8(node.id()) + ", addrs=" +
                                     U.addressesAsString(node) + ']');
 
                             // Always output in debug.
                             if (log.isDebugEnabled())
-                                log.debug("Authentication subject is not 
serializable [nodeId=" + node.id() +
-                                    ", addrs=" + U.addressesAsString(node));
+                                log.debug("Authentication failed [nodeId=" + 
node.id() + ", addrs=" +
+                                    U.addressesAsString(node));
 
                             try {
                                 trySendMessageDirectly(node, new 
TcpDiscoveryAuthFailedMessage(locNodeId, locHost));
@@ -3119,27 +3095,54 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
 
                             // Ignore join request.
                             return;
-                        }
+                        } else {
+                            if (!(subj instanceof Serializable)) {
+                                // Node has not pass authentication.
+                                LT.warn(log, null,
+                                    "Authentication subject is not 
Serializable [nodeId=" + node.id() +
+                                        ", addrs=" + U.addressesAsString(node) 
+ ']',
+                                    "Authentication subject is not 
Serializable [nodeId=" + U.id8(node.id()) +
+                                        ", addrs=" +
+                                        U.addressesAsString(node) + ']');
 
-                        // Stick in authentication subject to node (use 
security-safe attributes for copy).
-                        Map<String, Object> attrs = new 
HashMap<>(node.getAttributes());
+                                // Always output in debug.
+                                if (log.isDebugEnabled())
+                                    log.debug("Authentication subject is not 
serializable [nodeId=" + node.id() +
+                                        ", addrs=" + 
U.addressesAsString(node));
 
-                        attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT,
-                            
ignite.configuration().getMarshaller().marshal(subj));
+                                try {
+                                    trySendMessageDirectly(node, new 
TcpDiscoveryAuthFailedMessage(locNodeId, locHost));
+                                }
+                                catch (IgniteSpiException e) {
+                                    if (log.isDebugEnabled())
+                                        log.debug("Failed to send 
unauthenticated message to node " +
+                                            "[node=" + node + ", err=" + 
e.getMessage() + ']');
+                                }
+
+                                // Ignore join request.
+                                return;
+                            }
+
+                            // Stick in authentication subject to node (use 
security-safe attributes for copy).
+                            Map<String, Object> attrs = new 
HashMap<>(node.getAttributes());
 
-                        node.setAttributes(attrs);
+                            
attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT,
+                                
ignite.configuration().getMarshaller().marshal(subj));
+
+                            node.setAttributes(attrs);
+                        }
                     }
-                }
-                catch (IgniteException | IgniteCheckedException e) {
-                    LT.error(log, e, "Authentication failed [nodeId=" + 
node.id() + ", addrs=" +
-                        U.addressesAsString(node) + ']');
+                    catch (IgniteException | IgniteCheckedException e) {
+                        LT.error(log, e, "Authentication failed [nodeId=" + 
node.id() + ", addrs=" +
+                            U.addressesAsString(node) + ']');
 
-                    if (log.isDebugEnabled())
-                        log.debug("Failed to authenticate node (will ignore 
join request) [node=" + node +
-                            ", err=" + e + ']');
+                        if (log.isDebugEnabled())
+                            log.debug("Failed to authenticate node (will 
ignore join request) [node=" + node +
+                                ", err=" + e + ']');
 
-                    // Ignore join request.
-                    return;
+                        // Ignore join request.
+                        return;
+                    }
                 }
 
                 IgniteSpiNodeValidationResult err = 
getSpiContext().validateNode(node);
@@ -3492,7 +3495,8 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
                     return;
                 }
 
-                if (!isLocalNodeCoordinator() && 
nodeAuth.isGlobalNodeAuthentication()) {
+                if (!isLocalNodeCoordinator() && 
((IgniteKernal)ignite).context().security().enabled() &&
+                    nodeAuth.isGlobalNodeAuthentication()) {
                     boolean authFailed = true;
 
                     try {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b387122e/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
index ff497da..58478d3 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.testframework.junits;
 
 import org.apache.ignite.*;
-import org.apache.ignite.cache.*;
 import org.apache.ignite.cache.affinity.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;

Reply via email to