OOZIE-2240 add configuration to disable email attachment support (egashira via shwethags)
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.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 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 @@
 
     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 @@
             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 @@
                 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);
             }
         }
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>
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.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 @@
         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 @@
                 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();
diff --git a/release-log.txt b/release-log.txt
index 09e4b81..737c768 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
--- Oozie 4.2.0 release (unreleased)
+-- Oozie 4.2.0 release
 
+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)