summaryrefslogtreecommitdiff
blob: 03442b8e45d5b450985615f6872a4ddd69f49c8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
diff --exclude='*~' --exclude='.*' -I '# $Id$
--- a/dog.c	2005-05-13 08:01:37.000000000 -0400
+++ b/dog.c	2005-05-13 08:30:38.000000000 -0400
@@ -36,6 +36,7 @@
 #include <string.h>
 #include "getopt.h"
 #include <limits.h>
+#include <time.h>
 #include <netdb.h>
 
 // this is fun
@@ -1321,26 +1322,35 @@
   	InetSockAddr sa;
 	int newsock;
 	uint32 ipAddr;
-	int k;
+	socklen_t k;
 	time_t curr_time;
 	char curr_date[64];
 
 	k = sizeof(sa);
 	while ((newsock=accept(sock,(struct sockaddr*)&sa,&k)) != -1) {
 		if (!no_bind_header) {
+			char *result = NULL;
 			ipAddr = ntohl(sa.addr);
 			time(&curr_time);
-         strcpy(curr_date,ctime(&curr_time));
+			if (!(result = ctime(&curr_time))) {
+			    perror("ctime");
+			    goto done;
+			}
+			strncpy(curr_date, result, sizeof(curr_date) - 1);
 			while (!isalnum(curr_date[strlen(curr_date)-1])) {
 	         curr_date[strlen(curr_date)-1] = 0;
 			}
 			printf("# %s from %d.%d.%d.%d:%d\n",curr_date,(int)ipAddr>>24,(int)(ipAddr>>16)&0xff,(int)(ipAddr>>8)&0xff,(int)ipAddr&0xff,ntohs(sa.port));
  		}
-		straight_dump = newsock;
-		DumpThings(argc,argv,hang_up_bind ? -1 : newsock);
-		if (hang_up_bind) {
+
+		goto done;
+
+		done:
+		    straight_dump = newsock;
+		    DumpThings(argc,argv,hang_up_bind ? -1 : newsock);
+		    if (hang_up_bind) {
 			close(newsock);
-		}
+		    }
 	}
 }