Index: privatemsg.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.module,v
retrieving revision 1.70.2.30.2.91.2.64.2.78
diff -u -p -r1.70.2.30.2.91.2.64.2.78 privatemsg.module
--- privatemsg.module	18 Jul 2010 21:03:42 -0000	1.70.2.30.2.91.2.64.2.78
+++ privatemsg.module	24 Jul 2010 09:44:44 -0000
@@ -45,8 +45,12 @@ function privatemsg_permission() {
       'description' => t('Delete private messages'),
     ),
     'allow disabling privatemsg' => array(
-      'title' => t('Allow disabling privatemsg'),
-      'description' => t("Allows user to disable privatemsg so that they can't recieve any private messages.")
+      'title' => t('Allow disabling private messages'),
+      'description' => t("Allows user to disable privatemsg so that they can't recieve or send any private messages.")
+    ),
+    'reply only privatemsg' => array(
+      'title' => t('Reply to private messages'),
+      'description' => t('Allows to reply to private messages but not send new ones. Note that the write new private messages permission includes replies.')
     ),
   );
 }
@@ -1541,7 +1545,7 @@ function privatemsg_reply($thread_id, $b
 
 function _privatemsg_validate_message(&$message, $form = FALSE, $display_block_messages = TRUE) {
   $messages = array('error' => array(), 'warning' => array());
-  if (!privatemsg_user_access('write privatemsg', $message->author)) {
+  if (!(privatemsg_user_access('write privatemsg', $message->author) || (privatemsg_user_access('reply only privatemsg', $message->author) && isset($message->thread_id)))) {
     // no need to do further checks in this case...
     if ($form) {
       form_set_error('author', t('User @user is not allowed to write messages', array('@user' => $message->author->name)));
Index: privatemsg.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.pages.inc,v
retrieving revision 1.1.2.19
diff -u -p -r1.1.2.19 privatemsg.pages.inc
--- privatemsg.pages.inc	24 Jul 2010 09:20:45 -0000	1.1.2.19
+++ privatemsg.pages.inc	24 Jul 2010 09:44:44 -0000
@@ -297,7 +297,7 @@ function privatemsg_new($form, &$form_st
   }
 
   $form = array(
-    '#access'   => privatemsg_user_access('write privatemsg') && (!empty($recipients_string) || !$thread_id),
+    '#access'   => (privatemsg_user_access('write privatemsg') || privatemsg_user_access('reply only privatemsg')) && (!empty($recipients_string) || !$thread_id),
   );
   if (isset($form_state['privatemsg_preview'])) {
     $form['message_header'] = array(
@@ -636,7 +636,7 @@ function privatemsg_view($thread) {
   }
 
   // Display the reply form if user is allowed to use it.
-  if (privatemsg_user_access('write privatemsg')) {
+  if (privatemsg_user_access('write privatemsg') || privatemsg_user_access('reply only privatemsg')) {
     $content['reply'] = drupal_get_form('privatemsg_new', $thread['participants'], $thread['subject'], $thread['thread_id'], $thread['read_all']);
     $content['reply']['#weight'] = 5;
   }
