- /* Setting the source ip */
- strncpy(srcip, inet_ntoa(peer_info.sin_addr), IPSIZE);
- srcip[IPSIZE] = '\0';
-
-
- /* Removing syslog header */
- if(buffer[0] == '<')
- {
- buffer_pt = strchr(buffer+1, '>');
- if(buffer_pt)
- {
- buffer_pt++;
- }
- else
- {
- buffer_pt = buffer;
- }
- }
- else
- {
- buffer_pt = buffer;
- }
-
- /* Checking if IP is allowed here */
- if(OS_IPNotAllowed(srcip))
- {
- merror(DENYIP_WARN,ARGV0,srcip);
- }
-
- else if(SendMSG(logr.m_queue, buffer_pt, srcip,
- SYSLOG_MQ) < 0)
- {
- merror(QUEUE_ERROR,ARGV0,DEFAULTQUEUE, strerror(errno));
- if((logr.m_queue = StartMQ(DEFAULTQUEUE,READ)) < 0)
- {
- ErrorExit(QUEUE_FATAL,ARGV0,DEFAULTQUEUE);
- }
- }
- }
+ /* read through socket list for active socket */
+ for (sock = 0; sock <= fdmax; sock++) {
+ if (FD_ISSET (sock, &fdwork)) {
+
+ /* Receive message */
+ recv_b = recvfrom(sock, buffer, OS_SIZE_1024, 0,
+ (struct sockaddr *)&peer_info, &peer_size);
+
+ /* Nothing received */
+ if (recv_b <= 0) {
+ continue;
+ }
+
+ /* Null-terminate the message */
+ buffer[recv_b] = '\0';
+
+ /* Remove newline */
+ if (buffer[recv_b - 1] == '\n') {
+ buffer[recv_b - 1] = '\0';
+ }
+
+ /* Set the source IP */
+ satop((struct sockaddr *) &peer_info, srcip, IPSIZE);
+ srcip[IPSIZE] = '\0';
+
+ /* Remove syslog header */
+ if (buffer[0] == '<') {
+ buffer_pt = strchr(buffer + 1, '>');
+ if (buffer_pt) {
+ buffer_pt++;
+ } else {
+ buffer_pt = buffer;
+ }
+ } else {
+ buffer_pt = buffer;
+ }
+
+ /* Check if IP is allowed here */
+ if (OS_IPNotAllowed(srcip)) {
+ merror(DENYIP_WARN, ARGV0, srcip);
+ continue;
+ }
+
+ if (SendMSG(logr.m_queue, buffer_pt, srcip, SYSLOG_MQ) < 0) {
+ merror(QUEUE_ERROR, ARGV0, DEFAULTQUEUE, strerror(errno));
+
+ if ((logr.m_queue = StartMQ(DEFAULTQUEUE, WRITE)) < 0) {
+ ErrorExit(QUEUE_FATAL, ARGV0, DEFAULTQUEUE);
+ }
+ }
+ } /* if socket active */
+ } /* for() loop on sockets */
+ } /* while(1) loop for messages */