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);
- }
+ }
}
}
|