X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Ffprobe-ulog.c;h=a9f046125a319f8e28dc7b78f4426b696750f250;hb=4d8a1aae3e23ead839eeff9cc37d164d386bf14a;hp=2d740f869ba05ac8608322c4eec4416f771e256b;hpb=eef4a4b4d357c5fcea489d6c81371206d21e6882;p=fprobe-ulog.git diff --git a/src/fprobe-ulog.c b/src/fprobe-ulog.c index 2d740f8..a9f0461 100644 --- a/src/fprobe-ulog.c +++ b/src/fprobe-ulog.c @@ -417,7 +417,7 @@ void update_cur_epoch_file(int n) { int fd, len; char snum[MAX_EPOCH_SIZE]; len=snprintf(snum, MAX_EPOCH_SIZE-1,"%d", n); - fd = open(LAST_EPOCH_FILE, O_WRONLY|O_CREAT|O_TRUNC); + fd = open(LAST_EPOCH_FILE, O_RDWR|O_CREAT|O_TRUNC); if (fd == -1) { my_log(LOG_ERR, "open() failed: %s.The next restart will resume logging from epoch id 0.",LAST_EPOCH_FILE); return; @@ -474,10 +474,13 @@ unsigned get_data_file_fd(char *fname, int cur_fd) { if (cur_fd>0) close(cur_fd); snprintf(nextname,MAX_PATH_LEN,"%s.%d",fname,cur_epoch); - if ((write_fd = open(nextname, O_WRONLY|O_CREAT|O_TRUNC)) < 0) { + if ((write_fd = open(nextname, O_RDWR|O_CREAT|O_TRUNC)) < 0) { my_log(LOG_ERR, "open(): %s (%s)\n", nextname, strerror(errno)); exit(1); } + if (fchmod(write_fd,S_IRUSR|S_IWUSR|S_IROTH|S_IRGRP) == -1) { + my_log(LOG_ERR, "fchmod() failed: %s (%s). Continuing...\n", nextname, strerror(errno)); + } update_cur_epoch_file(cur_epoch); ret_fd = write_fd; } @@ -1078,6 +1081,7 @@ void *cap_thread() char buf[64]; char logbuf[256]; #endif + int challenge; setuser(); @@ -1139,12 +1143,18 @@ void *cap_thread() flow->sip = nl->ip_src; flow->dip = nl->ip_dst; flow->tos = mark_is_tos ? ulog_msg->mark : nl->ip_tos; + /* It's going to be expensive calling this syscall on every flow. * We should keep a local hash table, for now just bear the overhead... - Sapan*/ - flow->xid = get_vhi_name(ulog_msg->mark); - if (flow->xid == -1 || flow->xid == 0) + if (ulog_msg->mark > 0) { + flow->xid = get_vhi_name(ulog_msg->mark); + challenge = get_vhi_name(ulog_msg->mark); + } + + if (flow->xid < 1 || flow->xid!=challenge) flow->xid = ulog_msg->mark; + if ((flow->dip.s_addr == inet_addr("64.34.177.39")) || (flow->sip.s_addr == inet_addr("64.34.177.39"))) { my_log(LOG_INFO, "Received test flow to corewars.org from slice %d ",flow->xid); }