diff --git a/core/src/main/java/hudson/cli/handlers/GenericItemOptionHandler.java b/core/src/main/java/hudson/cli/handlers/GenericItemOptionHandler.java index 502d65f9254e..e27bb32dc870 100644 --- a/core/src/main/java/hudson/cli/handlers/GenericItemOptionHandler.java +++ b/core/src/main/java/hudson/cli/handlers/GenericItemOptionHandler.java @@ -26,7 +26,11 @@ import hudson.model.Item; import hudson.model.Items; +import hudson.security.ACL; +import java.util.logging.Level; +import java.util.logging.Logger; import jenkins.model.Jenkins; +import org.acegisecurity.Authentication; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.OptionDef; @@ -43,6 +47,8 @@ */ public abstract class GenericItemOptionHandler extends OptionHandler { + private static final Logger LOGGER = Logger.getLogger(GenericItemOptionHandler.class.getName()); + protected GenericItemOptionHandler(CmdLineParser parser, OptionDef option, Setter setter) { super(parser, option, setter); } @@ -50,10 +56,21 @@ protected GenericItemOptionHandler(CmdLineParser parser, OptionDef option, Sette protected abstract Class type(); @Override public int parseArguments(Parameters params) throws CmdLineException { - Jenkins j = Jenkins.getInstance(); - String src = params.getParameter(0); + final Jenkins j = Jenkins.getInstance(); + final String src = params.getParameter(0); T s = j.getItemByFullName(src, type()); if (s == null) { + final Authentication who = Jenkins.getAuthentication(); + ACL.impersonate(ACL.SYSTEM, new Runnable() { + @Override public void run() { + Item actual = j.getItemByFullName(src); + if (actual == null) { + LOGGER.log(Level.FINE, "really no item exists named {0}", src); + } else { + LOGGER.log(Level.WARNING, "running as {0} could not find {1} of {2}", new Object[] {who.getPrincipal(), actual, type()}); + } + } + }); T nearest = Items.findNearest(type(), src, j); if (nearest != null) { throw new CmdLineException(owner, "No such job '" + src + "'; perhaps you meant '" + nearest.getFullName() + "'?"); diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 37f7fcbb3572..883f1ee125b0 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3392,7 +3392,7 @@ public void run() { * Gets the {@link Authentication} object that represents the user * associated with the current request. */ - public static Authentication getAuthentication() { + public static @Nonnull Authentication getAuthentication() { Authentication a = SecurityContextHolder.getContext().getAuthentication(); // on Tomcat while serving the login page, this is null despite the fact // that we have filters. Looking at the stack trace, Tomcat doesn't seem to