Index: modules/blog/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog/blog.module,v
retrieving revision 1.311
diff -u -p -r1.311 blog.module
--- modules/blog/blog.module	8 Oct 2008 03:27:55 -0000	1.311
+++ modules/blog/blog.module	30 Oct 2008 13:40:36 -0000
@@ -23,7 +23,16 @@ function blog_node_info() {
  * Implementation of hook_perm().
  */
 function blog_perm() {
-  return node_list_permissions('blog');
+  $perms = node_list_permissions('blog');
+  $perms['access aggregated blog feed'] = array(
+    'title' => t('Access aggregated blog feed'),
+    'description' => t('Access the aggregated RSS feed of all blog posts.'),
+  );
+  $perms['access per-user blog feed'] = array(
+    'title' => t('Access per-user blog feed'),
+    'description' => t("Access the RSS feed of each blog posts."),
+  );
+  return $perms;
 }
 
 /**
@@ -151,13 +160,13 @@ function blog_menu() {
     'page callback' => 'blog_feed_user',
     'page arguments' => array(1),
     'access callback' => 'blog_page_user_access',
-    'access arguments' => array(1),
+    'access arguments' => array(1, TRUE),
     'type' => MENU_CALLBACK,
   );
   $items['blog/feed'] = array(
     'title' => 'Blogs',
     'page callback' => 'blog_feed_last',
-    'access arguments' => array('access content'),
+    'access arguments' => array('access aggregated blog feed'),
     'type' => MENU_CALLBACK,
   );
 
@@ -167,11 +176,13 @@ function blog_menu() {
 /**
  * Access callback for user blog pages.
  */
-function blog_page_user_access($account) {
+function blog_page_user_access($account, $feed = FALSE) {
   // The visitor must be able to access the site's content.
   // For a blog to 'exist' the user must either be able to
   // create new blog entries, or it must have existing posts.
-  return $account->uid && user_access('access content') && (user_access('create blog content', $account) || _blog_post_exists($account));
+  $access = $account->uid && user_access('access content') && (user_access('create blog content', $account) || _blog_post_exists($account));
+  
+  return $access && ($feed ? user_access('access per-user blog feed') : TRUE);
 }
 
 /**
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.990
diff -u -p -r1.990 node.module
--- modules/node/node.module	29 Oct 2008 10:08:52 -0000	1.990
+++ modules/node/node.module	30 Oct 2008 13:40:38 -0000
@@ -1182,6 +1182,10 @@ function node_perm() {
       'title' => t('Access content'),
       'description' => t('View published content.'),
     ),
+    'access frontpage feed' => array(
+      'title' => t('Access frontpage feed'),
+      'description' => t('Access the RSS feed of the front page.'),
+    ),
     'bypass node access' => array(
       'title' => t('Bypass node access'),
       'description' => t('View, edit and delete all site content. Users with this permission will bypass any content-related access control. %warning', array('%warning' => t('Warning: Give to trusted roles only; this permission has security implications.'))),
@@ -1574,7 +1578,7 @@ function node_menu() {
   $items['rss.xml'] = array(
     'title' => 'RSS feed',
     'page callback' => 'node_feed',
-    'access arguments' => array('access content'),
+    'access arguments' => array('access frontpage feed'),
     'type' => MENU_CALLBACK,
   );
   foreach (node_get_types('types', NULL, TRUE) as $type) {
@@ -1831,8 +1835,10 @@ function node_page_default() {
   }
 
   if ($num_rows) {
-    $feed_url = url('rss.xml', array('absolute' => TRUE));
-    drupal_add_feed($feed_url, variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
+    if (user_access('access frontpage feed')) {
+      $feed_url = url('rss.xml', array('absolute' => TRUE));
+      drupal_add_feed($feed_url, variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
+    }
     $output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
   }
   else {
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.102
diff -u -p -r1.102 system.admin.inc
--- modules/system/system.admin.inc	16 Oct 2008 20:23:08 -0000	1.102
+++ modules/system/system.admin.inc	30 Oct 2008 13:40:39 -0000
@@ -1506,7 +1506,7 @@ function system_rss_feeds_settings() {
     '#type' => 'select',
     '#title' => t('Number of items in each feed'),
     '#default_value' => variable_get('feed_default_items', 10),
-    '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)),
+    '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)),
     '#description' => t('Default number of items to include in each feed.')
   );
   $form['feed_item_length'] = array(
