You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by sh...@apache.org on 2015/05/22 08:01:09 UTC

oozie git commit: OOZIE-2240 add configuration to disable email attachment support (egashira via shwethags)

Repository: oozie
Updated Branches:
  refs/heads/master 3c8c2016e -> 48b64bc94


OOZIE-2240 add configuration to disable email attachment support (egashira via shwethags)


Project: http://git-wip-us.apache.org/repos/asf/oozie/repo
Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/48b64bc9
Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/48b64bc9
Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/48b64bc9

Branch: refs/heads/master
Commit: 48b64bc9438137517e24b37b674c5a8893db67c3
Parents: 3c8c201
Author: Shwetha GS <ss...@hortonworks.com>
Authored: Fri May 22 11:31:02 2015 +0530
Committer: Shwetha GS <ss...@hortonworks.com>
Committed: Fri May 22 11:31:02 2015 +0530

----------------------------------------------------------------------
 .../oozie/action/email/EmailActionExecutor.java | 11 +++++-
 core/src/main/resources/oozie-default.xml       |  8 +++++
 .../action/email/TestEmailActionExecutor.java   | 36 ++++++++++++++------
 release-log.txt                                 |  1 +
 4 files changed, 45 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oozie/blob/48b64bc9/core/src/main/java/org/apache/oozie/action/email/EmailActionExecutor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/action/email/EmailActionExecutor.java b/core/src/main/java/org/apache/oozie/action/email/EmailActionExecutor.java
index 04d49c3..1d260b4 100644
--- a/core/src/main/java/org/apache/oozie/action/email/EmailActionExecutor.java
+++ b/core/src/main/java/org/apache/oozie/action/email/EmailActionExecutor.java
@@ -52,6 +52,7 @@ import org.apache.oozie.action.ActionExecutor;
 import org.apache.oozie.action.ActionExecutorException;
 import org.apache.oozie.action.ActionExecutorException.ErrorType;
 import org.apache.oozie.client.WorkflowAction;
+import org.apache.oozie.service.ConfigurationService;
 import org.apache.oozie.service.HadoopAccessorException;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.HadoopAccessorService;
@@ -73,6 +74,7 @@ public class EmailActionExecutor extends ActionExecutor {
     public static final String EMAIL_SMTP_USER = CONF_PREFIX + "smtp.username";
     public static final String EMAIL_SMTP_PASS = CONF_PREFIX + "smtp.password";
     public static final String EMAIL_SMTP_FROM = CONF_PREFIX + "from.address";
+    public static final String EMAIL_ATTACHMENT_ENABLED = CONF_PREFIX + "attachment.enabled";
 
     private final static String TO = "to";
     private final static String CC = "cc";
@@ -84,6 +86,10 @@ public class EmailActionExecutor extends ActionExecutor {
 
     private final static String DEFAULT_CONTENT_TYPE = "text/plain";
     private XLog LOG = XLog.getLog(getClass());
+    public static final String EMAIL_ATTACHMENT_ERROR_MSG =
+            "\n Note: This email is missing configured email attachments "
+            + "as sending attachments in email action is disabled in the Oozie server. "
+            + "It could be for security compliance with data protection or other reasons";
 
     public EmailActionExecutor() {
         super("email");
@@ -210,7 +216,7 @@ public class EmailActionExecutor extends ActionExecutor {
             message.setSubject(subject);
 
             // when there is attachment
-            if (attachments != null && attachments.length > 0) {
+            if (attachments != null && attachments.length > 0 && ConfigurationService.getBoolean(EMAIL_ATTACHMENT_ENABLED)) {
                 Multipart multipart = new MimeMultipart();
 
                 // Set body text
@@ -234,6 +240,9 @@ public class EmailActionExecutor extends ActionExecutor {
                 message.setContent(multipart);
             }
             else {
+                if (attachments != null && attachments.length > 0 && !ConfigurationService.getBoolean(EMAIL_ATTACHMENT_ENABLED)) {
+                    body = body + EMAIL_ATTACHMENT_ERROR_MSG;
+                }
                 message.setContent(body, contentType);
             }
         }

http://git-wip-us.apache.org/repos/asf/oozie/blob/48b64bc9/core/src/main/resources/oozie-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/oozie-default.xml b/core/src/main/resources/oozie-default.xml
index 8d59182..8960073 100644
--- a/core/src/main/resources/oozie-default.xml
+++ b/core/src/main/resources/oozie-default.xml
@@ -2535,4 +2535,12 @@
         </description>
     </property>
 
+    <property>
+        <name>oozie.email.attachment.enabled</name>
+        <value>true</value>
+        <description>
+            This value determines whether to support email attachment of a file on HDFS.
+            Set it false if there is any security concern.
+        </description>
+    </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/oozie/blob/48b64bc9/core/src/test/java/org/apache/oozie/action/email/TestEmailActionExecutor.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/oozie/action/email/TestEmailActionExecutor.java b/core/src/test/java/org/apache/oozie/action/email/TestEmailActionExecutor.java
index 1ccd22d..747e3ac 100644
--- a/core/src/test/java/org/apache/oozie/action/email/TestEmailActionExecutor.java
+++ b/core/src/test/java/org/apache/oozie/action/email/TestEmailActionExecutor.java
@@ -35,6 +35,7 @@ import org.apache.oozie.WorkflowActionBean;
 import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.action.ActionExecutorException;
 import org.apache.oozie.action.hadoop.ActionExecutorTestCase;
+import org.apache.oozie.service.ConfigurationService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.WorkflowAppService;
 import org.apache.oozie.util.XConfiguration;
@@ -229,18 +230,21 @@ public class TestEmailActionExecutor extends ActionExecutorTestCase {
         StringBuilder tag = new StringBuilder();
         tag.append(path1.toString()).append(",").append(path2.toString());
         assertAttachment(tag.toString(), 2, content1, content2);
+
+        //test case when email attachment support set to false
+        ConfigurationService.setBoolean(EmailActionExecutor.EMAIL_ATTACHMENT_ENABLED, false);
+        sendAndReceiveEmail(tag.toString());
+        MimeMessage retMeg = server.getReceivedMessages()[1];
+        String msgBody = GreenMailUtil.getBody(retMeg);
+        assertEquals(msgBody.indexOf("This is a test mail"), 0);
+        assertNotSame(msgBody.indexOf(EmailActionExecutor.EMAIL_ATTACHMENT_ERROR_MSG),-1);
+        // email content is not multi-part since not attaching files
+        assertFalse(retMeg.getContent() instanceof Multipart);
+        assertTrue(retMeg.getContentType().contains("text/plain"));
     }
 
     private void assertAttachment(String attachtag, int attachCount, String content1, String content2) throws Exception {
-        StringBuilder elem = new StringBuilder();
-        elem.append("<email xmlns=\"uri:oozie:email-action:0.2\">");
-        elem.append("<to>oozie@yahoo-inc.com</to>");
-        elem.append("<subject>sub</subject>");
-        elem.append("<body>&lt;body&gt; This is a test mail &lt;/body&gt;</body>");
-        elem.append("<attachment>").append(attachtag).append("</attachment>");
-        elem.append("</email>");
-        EmailActionExecutor emailContnetType = new EmailActionExecutor();
-        emailContnetType.validateAndMail(createAuthContext("email-action"), XmlUtils.parseXml(elem.toString()));
+        sendAndReceiveEmail(attachtag);
         MimeMessage retMeg = server.getReceivedMessages()[0];
         Multipart retParts = (Multipart) (retMeg.getContent());
         int numAttach = 0;
@@ -253,12 +257,24 @@ public class TestEmailActionExecutor extends ActionExecutorTestCase {
                 numAttach++;
             }
             else {
-                assertEquals("<body> This is a test mail </body>", retValue);
+                assertEquals("This is a test mail", retValue);
             }
         }
         assertEquals(attachCount, numAttach);
     }
 
+    private void sendAndReceiveEmail(String attachtag) throws Exception {
+        StringBuilder elem = new StringBuilder();
+        elem.append("<email xmlns=\"uri:oozie:email-action:0.2\">");
+        elem.append("<to>oozie@yahoo-inc.com</to>");
+        elem.append("<subject>sub</subject>");
+        elem.append("<body>This is a test mail</body>");
+        elem.append("<attachment>").append(attachtag).append("</attachment>");
+        elem.append("</email>");
+        EmailActionExecutor emailExecutor = new EmailActionExecutor();
+        emailExecutor.validateAndMail(createAuthContext("email-action"), XmlUtils.parseXml(elem.toString()));
+    }
+
     @Override
     protected void tearDown() throws Exception {
         super.tearDown();

http://git-wip-us.apache.org/repos/asf/oozie/blob/48b64bc9/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 32eea5c..809020a 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -2,6 +2,7 @@
 
 -- Oozie 4.2.0 release (unreleased)
 
+OOZIE-2240 add configuration to disable email attachment support (egashira via shwethags)
 OOZIE-1963 Create a Hive Server 2 example (qwertymaniac via shwethags)
 OOZIE-1993 Rerun fails during join in certain condition (shwethags)
 OOZIE-2236 Need to package hive-hcatalog-server-extensions.jar in the hcatalog sharelib (venkatnrangan via bzhang)