$OpenBSD: patch-oproute_cpp,v 1.2 2002/09/17 08:42:20 pvalchev Exp $
--- oproute.cpp.orig	Wed Feb 28 19:28:31 2001
+++ oproute.cpp	Tue Sep 17 02:07:26 2002
@@ -146,10 +146,13 @@ OpRoute::OpRoute(string sDestination, in
 	cout << "Could not resolve host... " << endl;
 	exit(1);
       }
+    recvfd = socket(PF_INET, SOCK_RAW, 1);
+    /* revoke priveleges */
+    seteuid(getuid());
+    setuid(getuid());
     struct in_addr *ia = (struct in_addr *) *he->h_addr_list;
     sDestinationIP = inet_ntoa(*ia);
     nPort = getpid();
-    recvfd = socket(PF_INET, SOCK_RAW, 1);
     long nBufSize = 10000000;
     setsockopt(recvfd, SOL_SOCKET, SO_RCVBUF, (char *)&nBufSize, sizeof(nBufSize));
     nCurrentTTL = nBeginTTL = nTheBeginTTL;
@@ -706,7 +709,7 @@ void OpRoute::CatchICMP(Hop *pHop)
 	    udp = (struct udphdr *)(recvbuf + hlen1 + 8 +hlen2);
 	    if(hip->ip_p == IPPROTO_UDP)
 	      {
-		pHop->nPort = ntohs(udp->dest);
+		pHop->nPort = ntohs(udp->uh_dport);
 		pHop->sRouterIP = sock_ntop_host((sockaddr *)sa_recv, sa_len);
 		pHop->state = HOP_COMPLETED;
 		pHop->fLatency = GetLatencyFromTV(tvNow, tvTimeOfLastSend);
@@ -721,14 +724,14 @@ void OpRoute::CatchICMP(Hop *pHop)
 	      {
 		if (icmp->icmp_code == ICMP_UNREACH_PORT) 
 		  {
-		    pHop->nPort = ntohs(udp->dest);
+		    pHop->nPort = ntohs(udp->uh_dport);
 		    pHop->sRouterIP = sock_ntop_host((sockaddr *)sa_recv, sa_len);
 		    pHop->state = HOP_ENDOFLINE;
 		    pHop->fLatency = GetLatencyFromTV(tvNow, tvTimeOfLastSend);
 		  }
 		else 
 		  {
-		    pHop->nPort = ntohs(udp->dest);
+		    pHop->nPort = ntohs(udp->uh_dport);
 		    pHop->sRouterIP = sock_ntop_host((sockaddr *)sa_recv, sa_len);
 		    pHop->state = HOP_FAILED;
 		  }
