diff --git a/modules/node/node.module b/modules/node/node.module index 4cc6bdf..e88444a 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -2256,11 +2256,20 @@ function node_access_acquire_grants($node) { */ function node_access_write_grants($node, $grants, $realm = NULL, $delete = TRUE) { if ($delete) { - $query = 'DELETE FROM {node_access} WHERE nid = %d'; - if ($realm) { - $query .= " AND realm in ('%s', 'all')"; + // Prevent deletion of node access table entries if node id is not existing. + // Otherwise the node id will be interpreted as 0 wiping out access for all + // anonymous users, see http://drupal.org/node/282555. + if (empty($node->nid) || !intval($node->nid)) { + $url = url($_REQUEST['q'], array('absolute' => TRUE)); + watchdog('node', 'Node access grants for node @title couldn\'t be wiped out as node id is not existing.', array('@title' => $node->title), WATCHDOG_ERROR, $url); + } + else { + $query = 'DELETE FROM {node_access} WHERE nid = %d'; + if ($realm) { + $query .= " AND realm in ('%s', 'all')"; + } + db_query($query, $node->nid, $realm); } - db_query($query, $node->nid, $realm); } // Only perform work when node_access modules are active.