5
0
mirror of https://github.com/apache/sqoop.git synced 2025-05-07 00:03:22 +08:00

SQOOP-2439: Sqoop2: NullPointerException when calling job status notification URL

(Dian Fu via Jarek Jarcec Cecho)
This commit is contained in:
Jarek Jarcec Cecho 2015-08-26 16:32:52 -07:00
parent 90eb27474d
commit 37fec0abd6
5 changed files with 39 additions and 3 deletions

View File

@ -66,6 +66,15 @@ public final class SecurityConstants {
public static final String PREFIX_AUTHENTICATION_KERBEROS_CONFIG = public static final String PREFIX_AUTHENTICATION_KERBEROS_CONFIG =
PREFIX_AUTHENTICATION_CONFIG + "kerberos."; PREFIX_AUTHENTICATION_CONFIG + "kerberos.";
/**
* The config specifies the default user.
*/
public static final String AUTHENTICATION_DEFAULT_USER =
PREFIX_AUTHENTICATION_CONFIG + "default.user";
public static final String AUTHENTICATION_DEFAULT_USER_DEFAULT =
"sqoop.anonymous.user";
/** /**
* The config specifies the kerberos principal. * The config specifies the kerberos principal.
* <tt>org.apache.sqoop.security.authentication.kerberos.principal</tt>. * <tt>org.apache.sqoop.security.authentication.kerberos.principal</tt>.

View File

@ -64,7 +64,10 @@ public enum SecurityError implements ErrorCode {
AUTH_0013("Unable to get principal from http request"), AUTH_0013("Unable to get principal from http request"),
/** Authorization Exception, used by authorization implementation, etc. Sentry. */ /** Authorization Exception, used by authorization implementation, etc. Sentry. */
AUTH_0014("Authorization exception"); AUTH_0014("Authorization exception"),
/** Don't support to grant/remoke privileges for default user. */
AUTH_0015("Cannot grant/revoke privileges for default user");
private final String message; private final String message;

View File

@ -158,6 +158,9 @@ org.apache.sqoop.execution.engine=org.apache.sqoop.execution.mapreduce.Mapreduce
#org.apache.sqoop.security.authentication.proxyuser.#USER#.groups=* #org.apache.sqoop.security.authentication.proxyuser.#USER#.groups=*
#org.apache.sqoop.security.authentication.proxyuser.#USER#.hosts=* #org.apache.sqoop.security.authentication.proxyuser.#USER#.hosts=*
# Default user, default value is "sqoop.anonymous.user"
#org.apache.sqoop.security.authentication.default.user=
# #
# Authorization configuration # Authorization configuration
# #

View File

@ -20,6 +20,7 @@
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.sqoop.audit.AuditLoggerManager; import org.apache.sqoop.audit.AuditLoggerManager;
import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.common.SqoopException;
import org.apache.sqoop.core.SqoopConfiguration;
import org.apache.sqoop.error.code.CommonRepositoryError; import org.apache.sqoop.error.code.CommonRepositoryError;
import org.apache.sqoop.repository.Repository; import org.apache.sqoop.repository.Repository;
import org.apache.sqoop.repository.RepositoryManager; import org.apache.sqoop.repository.RepositoryManager;
@ -31,6 +32,7 @@
import org.apache.sqoop.model.MRole; import org.apache.sqoop.model.MRole;
import org.apache.sqoop.security.AuthorizationHandler; import org.apache.sqoop.security.AuthorizationHandler;
import org.apache.sqoop.security.AuthorizationManager; import org.apache.sqoop.security.AuthorizationManager;
import org.apache.sqoop.security.SecurityConstants;
import org.apache.sqoop.security.SecurityError; import org.apache.sqoop.security.SecurityError;
import org.apache.sqoop.server.RequestContext; import org.apache.sqoop.server.RequestContext;
import org.apache.sqoop.server.RequestHandler; import org.apache.sqoop.server.RequestHandler;
@ -308,6 +310,15 @@ private JsonBean grantRevokePrivilege(RequestContext ctx, boolean isGrant) {
// Get privilege object // Get privilege object
List<MPrivilege> privileges = privilegesBean == null ? null : privilegesBean.getPrivileges(); List<MPrivilege> privileges = privilegesBean == null ? null : privilegesBean.getPrivileges();
String defaultUser = SqoopConfiguration.getInstance().getContext().getString(
SecurityConstants.AUTHENTICATION_DEFAULT_USER,
SecurityConstants.AUTHENTICATION_DEFAULT_USER_DEFAULT);
for (MPrincipal principal : principals) {
if (defaultUser.equals(principal.getName())) {
throw new SqoopException(SecurityError.AUTH_0015);
}
}
if (privileges != null) { if (privileges != null) {
for (MPrivilege privilege : privileges) { for (MPrivilege privilege : privileges) {
checkResourceExists(privilege.getResource()); checkResourceExists(privilege.getResource());

View File

@ -20,7 +20,9 @@
import org.apache.hadoop.security.authentication.client.PseudoAuthenticator; import org.apache.hadoop.security.authentication.client.PseudoAuthenticator;
import org.apache.hadoop.security.token.delegation.web.HttpUserGroupInformation; import org.apache.hadoop.security.token.delegation.web.HttpUserGroupInformation;
import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.common.SqoopException;
import org.apache.sqoop.core.SqoopConfiguration;
import org.apache.sqoop.security.AuthenticationManager; import org.apache.sqoop.security.AuthenticationManager;
import org.apache.sqoop.security.SecurityConstants;
import org.apache.sqoop.server.common.ServerError; import org.apache.sqoop.server.common.ServerError;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -121,10 +123,18 @@ public Locale getAcceptLanguageHeader() {
* @return Name of user sending the request * @return Name of user sending the request
*/ */
public String getUserName() { public String getUserName() {
String userName;
if (AuthenticationManager.getInstance().getAuthenticationHandler().isSecurityEnabled()) { if (AuthenticationManager.getInstance().getAuthenticationHandler().isSecurityEnabled()) {
return HttpUserGroupInformation.get().getShortUserName(); userName = HttpUserGroupInformation.get().getShortUserName();
} else { } else {
return request.getParameter(PseudoAuthenticator.USER_NAME); userName = request.getParameter(PseudoAuthenticator.USER_NAME);
} }
if (userName == null || userName.trim().isEmpty()) {
userName = SqoopConfiguration.getInstance().getContext().getString(
SecurityConstants.AUTHENTICATION_DEFAULT_USER,
SecurityConstants.AUTHENTICATION_DEFAULT_USER_DEFAULT);
}
return userName;
} }
} }