[bgpd] struct peer must have bgp field valid (redistribute crash)

2006-10-19 Paul Jakma <paul.jakma@sun.com>

	* bgpd.c: (peer_new) bgp element of peer absolutely must be
	  filled in, make peer_new() require it as argument and update
	  all callers. Fixes a crash reported by Jan 'yanek' Bortl and
	  Andrew Schorr where bgpd would crash in bgp_pcount_adjust
	  trying to dereference the bgp member of bgp->peer_self,
	  triggered through redistribution.
	* bgp_route.c: (bgp_pcount_adjust) assert sanity of arguments.
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 7b36974..3584b21 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -196,6 +196,9 @@
 static void
 bgp_pcount_adjust (struct bgp_node *rn, struct bgp_info *ri)
 {
+  assert (rn && rn->table);
+  assert (ri && ri->peer && ri->peer->bgp);
+
   /* Ignore 'pcount' for RS-client tables */
   if (rn->table->type != BGP_TABLE_MAIN
       || ri->peer == ri->peer->bgp->peer_self)