Blob Blame History Raw
diff -NarU5 argus-clients-2.0.6.fixes.1.orig/common/argus_client.c argus-clients-2.0.6.fixes.1/common/argus_client.c
--- argus-clients-2.0.6.fixes.1.orig/common/argus_client.c	2004-05-10 09:41:34.000000000 -0400
+++ argus-clients-2.0.6.fixes.1/common/argus_client.c	2006-03-08 16:37:12.000000000 -0500
@@ -67,10 +67,14 @@
          }
 
          RaPrintDate = 0;
          for (x = 0; x < MAX_PRINT_ALG_TYPES; x++) {
             if (!strncmp (RaPrintKeyWords[x], soption, strlen(RaPrintKeyWords[x]))) {
+	       if (x == 0) {
+		  RaPrintStartTime = 1;
+		  RaPrintLastTime = 1;
+	       }
                if (x < 3) RaPrintDate++;
                switch (RaOptionOperation) {
                   case RA_ADD_OPTION:
                      if (RaOptionRank == -1) {
                         int z = 0;
@@ -3088,11 +3092,11 @@
       } else
          break;
    }
 
    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
-      char tmpbuf[128], *ptr = tmpbuf, *str = RaLabel, lastchr = ' ';
+      char tmpbuf[1024], *ptr = tmpbuf, *str = RaLabel, lastchr = ' ';
 
       bzero (tmpbuf, sizeof(tmpbuf));
       lastchr = RaFieldDelimiter;
       while (*str) {
          if (*str == ' ') {
@@ -3118,12 +3122,14 @@
 void
 ArgusPrintDateLabel (char *buf)
 {
    if (lflag)
       ArgusPrintLastDateLabel (buf);
-   else
+   else {
       ArgusPrintStartDateLabel (buf);
+      ArgusPrintLastDateLabel (buf);
+   }
 }
 
 
 void
 ArgusPrintStartDateLabel (char *buf)
@@ -3446,11 +3452,12 @@
          if (ArgusDstUserDataLen > 10) len++;
          sprintf (&buf[strlen(buf)], "%*sdstUdata%*s ", (len)/2, " ", (len)/2, " ");
          if (len & 0x01)
             sprintf(&buf[strlen(buf)], " ");
       }
-   }
+   } else 
+      sprintf (&buf[strlen(buf)], " srcUdata%cdstUdata ", RaFieldDelimiter);
 }
 
 void
 ArgusPrintTCPExtensionsLabel (char *buf)
 {
diff -NarU5 argus-clients-2.0.6.fixes.1.orig/common/argus_util.c argus-clients-2.0.6.fixes.1/common/argus_util.c
--- argus-clients-2.0.6.fixes.1.orig/common/argus_util.c	2003-12-06 12:43:56.000000000 -0500
+++ argus-clients-2.0.6.fixes.1/common/argus_util.c	2006-03-08 16:45:56.000000000 -0500
@@ -907,39 +907,31 @@
 extern char *ArgusProgramName;
 
 void
 ArgusPrintStartDate (char *date, struct ArgusRecord *ptr)
 {
-   char delim = ' ';
    struct timeval *tvp = NULL;
 
    if (ptr->ahdr.type & ARGUS_MAR)
       tvp = &ptr->argus_mar.startime;
    else
       tvp = &ptr->argus_far.time.start;
 
-   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-      delim = RaFieldDelimiter;
-
-   sprintf (&date[strlen(date)], "%s%c", print_time(tvp), delim);
+   sprintf (&date[strlen(date)], "%s", print_time(tvp));
 }
 
 void
 ArgusPrintLastDate (char *date, struct ArgusRecord *ptr)
 {
-   char delim = ' ';
    struct timeval *tvp = NULL;
 
    if (ptr->ahdr.type & ARGUS_MAR)
       tvp = &ptr->argus_mar.now;
    else 
       tvp = &ptr->argus_far.time.last;
       
-   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-      delim = RaFieldDelimiter;
-
-   sprintf (&date[strlen(date)], "%s%c", print_time(tvp), delim);
+   sprintf (&date[strlen(date)], "%s", print_time(tvp));
 }
 
 void
 ArgusPrintDate (char *date, struct ArgusRecord *ptr)
 {
@@ -965,11 +957,11 @@
    if (!((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')))
       if (RaPrintStartTime && RaPrintLastTime)
          sprintf (&date[strlen(date)], " ");
 
    if (RaPrintLastTime)
-      sprintf (&date[strlen(date)], "%s%c", print_time(last), delim);
+      sprintf (&date[strlen(date)], "%s", print_time(last));
 }
 
 void ArgusPrintSrcRate (char *, struct ArgusRecord *);
 void ArgusPrintDstRate (char *, struct ArgusRecord *);
 void ArgusPrintRate (char *, struct ArgusRecord *);
@@ -1001,21 +993,21 @@
       ArgusThisAgr = (struct ArgusAGRStruct *)ArgusThisFarHdrs[ARGUS_AGR_DSR_INDEX];
 
       if (ArgusThisAgr && (ArgusThisAgr->type == ARGUS_AGR_DSR))
          hits = ArgusThisAgr->count;
 
-      sprintf(&buf[strlen(buf)], "%5d ", hits);
+      sprintf(&buf[strlen(buf)], "%5d", hits);
    }
 }
 
 void ArgusPrintAverageDuration (char *, struct ArgusRecord *);
 
 void
 ArgusPrintAvgDuration (char *date, struct ArgusRecord *ptr)
 {
    struct ArgusAGRStruct *ArgusThisAgr = NULL;
-   char *sptr, *iptr, delim = ' ';
+   char *sptr, *iptr;
    struct timeval *start = NULL, *last = NULL;
    struct timeval  buf,  *time = &buf;
 
    if (ptr->ahdr.type & ARGUS_MAR) {
       start = &ptr->argus_mar.startime;
@@ -1063,21 +1055,16 @@
    if (pflag) {
       sptr = &date[strlen(date)];
       sprintf(sptr, ".%06d", (int) time->tv_usec);
       sptr[pflag + 1] = '\0';
    }
-
-   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-      sprintf(&date[strlen(date)], "%c", delim);
-   else
-      sprintf(&date[strlen(date)], "%c", ' ');
 }
 
 void
 ArgusPrintDuration (char *date, struct ArgusRecord *ptr)
 {
-   char *sptr, *iptr, delim = ' ';
+   char *sptr, *iptr;
    struct timeval *start = NULL, *last = NULL;
    struct timeval  buf,  *time = &buf;
 
    if (ptr->ahdr.type & ARGUS_MAR) {
       start = &ptr->argus_mar.startime;
@@ -1113,15 +1100,10 @@
    if (pflag) {
       sptr = &date[strlen(date)];
       sprintf(sptr, ".%06d", (int) time->tv_usec);
       sptr[pflag + 1] = '\0';
    }
-
-   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-      sprintf(&date[strlen(date)], "%c", delim);
-   else
-      sprintf(&date[strlen(date)], "%c", ' ');
 }
 
 void ArgusGetIndicatorString (struct ArgusRecord *, char *);
 
 
@@ -1213,12 +1195,10 @@
                }
             }
          }
       }
 
-      *ptr = RaFieldDelimiter;
-
    } else {
       int encdone = 0;
 
       bcopy ("          ", buf, 9);
       if (argus->ahdr.type & ARGUS_MAR) {
@@ -1384,11 +1364,11 @@
    if (ArgusInput->ArgusManStart.ahdr.status & ARGUS_ID_IS_IPADDR)
       argusIDStr = ipaddr_string (&argus->ahdr.argusid);
    else
       sprintf (argusIDStr, "%u", argus->ahdr.argusid);
 
-   sprintf(buf, "%-15.15s ", argusIDStr);
+   sprintf(buf, "%-15.15s", argusIDStr);
 }
 
 void ArgusPrintBinNumber (char *, struct ArgusRecord *);
 void ArgusPrintBins (char *, struct ArgusRecord *);
 
@@ -1402,11 +1382,11 @@
 }
 
 
 void
 ArgusPrintSequenceNumber (char *buf, struct ArgusRecord *argus) {
-   sprintf(buf, "%d ", argus->ahdr.seqNumber);
+   sprintf(buf, "%d", argus->ahdr.seqNumber);
 }
 
 
 void
 ArgusPrintIndicator (char *buf, struct ArgusRecord *argus) {
@@ -1422,14 +1402,25 @@
       struct ArgusMacStruct *mac = (struct ArgusMacStruct *) ArgusThisFarHdrs[ARGUS_MAC_DSR_INDEX];
  
       esrcString = etheraddr_string ((u_char *)&mac->phys_union.ether.ethersrc);
       edstString = etheraddr_string ((u_char *)&mac->phys_union.ether.etherdst);
  
-      sprintf (buf, "%17.17s %17.17s ", esrcString, edstString);
+      sprintf (buf, "%17.17s", esrcString);
+      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+         sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+      else
+         sprintf(&buf[strlen(buf)], "%c", ' ');
+      sprintf (&buf[strlen(buf)], "%17.17s", edstString);
 
-   } else
-      sprintf (buf, "%17.17s %17.17s ", blankStr, blankStr);
+   } else {
+      sprintf (buf, "%17.17s", blankStr);
+      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+         sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+      else
+         sprintf(&buf[strlen(buf)], "%c", ' ');
+      sprintf (&buf[strlen(buf)], "%17.17s", blankStr);
+   }
 }
 
 void
 ArgusPrintProto (char *buf, struct ArgusRecord *argus)
 {
@@ -1450,14 +1441,14 @@
             protoStr = protoStrBuf;
             sprintf (protoStr, "%u", proto);
             protoStr = (nflag > 2) ? protoStrBuf :
                        (proto >= IPPROTOSTR) ? "unas" : ip_proto_string[proto];
 
-            if ((proto == IPPROTO_UDP) && (argus->argus_far.flow.ip_flow.tp_p == ARGUS_RTP_FLOWTAG))
+            if ((nflag < 3) && (proto == IPPROTO_UDP) && (argus->argus_far.flow.ip_flow.tp_p == ARGUS_RTP_FLOWTAG))
                protoStr = "rtp";
 
-            if ((proto == IPPROTO_UDP) && (argus->argus_far.flow.ip_flow.tp_p == ARGUS_RTCP_FLOWTAG))
+            if ((nflag < 3) && (proto == IPPROTO_UDP) && (argus->argus_far.flow.ip_flow.tp_p == ARGUS_RTCP_FLOWTAG))
                protoStr = "rtcp";
 
             break;
          }
 
@@ -1466,11 +1457,11 @@
             break;
       }
    }
 
    if (protoStr != NULL)
-      sprintf (buf, "%4.4s ", protoStr);
+      sprintf (buf, "%4.4s", protoStr);
 }
 
 int ArgusPrintNet = 0;
 
 void
@@ -1535,11 +1526,11 @@
 {
    void *addr = NULL;
    struct ArgusFlow *flow;
 
    if (argus->ahdr.type & ARGUS_MAR) {
-      sprintf (&buf[strlen(buf)], "%*d ", hfield, argus->argus_mar.nextMrSequenceNum);
+      sprintf (&buf[strlen(buf)], "%*u ", hfield, argus->argus_mar.nextMrSequenceNum);
 
    } else {
       flow = &argus->argus_far.flow;
       ArgusThisProto = argus->ahdr.status & 0xFFFF;
 
@@ -1593,13 +1584,14 @@
          addrstr = etheraddr_string ((unsigned char *) addr);
          break;
    }
 
    if (addr != NULL) 
-      sprintf (buf, "%*.*s ", thishfield, thishfield, addrstr);
+      sprintf (buf, "%*.*s", thishfield, thishfield, addrstr);
    else
-      sprintf (buf, "%*.*s ", thishfield, thishfield, "                  ");
+      sprintf (buf, "%*.*s", thishfield, thishfield, "                  ");
+
 }
 
 
 void
 ArgusPrintSrcPort (char *buf, struct ArgusRecord *argus)
@@ -1629,12 +1621,10 @@
          }
 
          case ETHERTYPE_REVARP:
          case ETHERTYPE_ARP:
             sprintf (&buf[strlen(buf)], "%*s", pfield - 1, " ");
-            if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-               sprintf (buf, "%c", RaFieldDelimiter);
             break;
 
          default:
             ArgusPrintPort (&buf[strlen(buf)], argus, flow->mac_flow.ssap);
             break;
@@ -1648,11 +1638,11 @@
 
 void
 ArgusPrintDstPort (char *buf, struct ArgusRecord *argus)
 {
    if (argus->ahdr.type & ARGUS_MAR) {
-      sprintf (&buf[strlen(buf)], "%-*d", pfield + 1, argus->argus_mar.flows);
+      sprintf (&buf[strlen(buf)], "%-*u", pfield + 1, argus->argus_mar.flows);
 
    } else {
       struct ArgusFlow *flow = &argus->argus_far.flow;
       ArgusThisProto = argus->ahdr.status & 0xFFFF;
 
@@ -1671,13 +1661,10 @@
                else
                   sprintf (&buf[strlen(buf)], "%*s", pfield + 1, " ");
             } else
                sprintf (&buf[strlen(buf)], "%*s", pfield - 1, " ");
 
-            if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-               sprintf (buf, "%c", RaFieldDelimiter);
-
             break;
 
          default:
             ArgusPrintPort (&buf[strlen(buf)], argus, flow->mac_flow.dsap);
             break;
@@ -1697,75 +1684,82 @@
          if (port != 0xFFFF) {
             if (nflag > 1) {
                switch (proto) {
                   case IPPROTO_TCP:
                   case IPPROTO_UDP:
-                     if (RaPrintIndex > 0)
+                     if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
+			 (RaFieldDelimiter == '\0'))) {
                         if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                              (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                            if (RaFieldDelimiter == '\0')
                               if (buf[strlen(buf) - 1] == ' ')
                                  buf[strlen(buf) - 1] = '.';
+		     }
+
+                     sprintf (buf, "%-*d", thispfield, port);
 
-                     sprintf (buf, "%-*d ", thispfield, port);
                      break;
 
                   default:
-                     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-                        sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
-                     else
-                        sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                      break;
                }
             } else {
                switch (proto) {
                   case IPPROTO_TCP:
                   case IPPROTO_UDP:
-                     if (RaPrintIndex > 0)
+                     if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
+			 (RaFieldDelimiter == '\0'))) {
                         if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                              (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                            if (RaFieldDelimiter == '\0')
                               if (buf[strlen(buf) - 1] == ' ')
                                  buf[strlen(buf) - 1] = '.';
+		     }
 
                      if (proto == IPPROTO_TCP)
-                        sprintf (buf, "%-*.*s ", thispfield, thispfield, tcpport_string(port));
+                        sprintf (buf, "%-*.*s", thispfield, thispfield, tcpport_string(port));
                      else
-                        sprintf (buf, "%-*.*s ", thispfield, thispfield, udpport_string(port));
+                        sprintf (buf, "%-*.*s", thispfield, thispfield, udpport_string(port));
                      break;
 
                   default:
-                     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-                        sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
-                     else
-                        sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
+
                      break;
                }
             }
 
          } else {
             if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
                sprintf (buf, "%c", RaFieldDelimiter);
             } else {
                switch (proto) {
                   default:
-                     sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
+                     sprintf (buf, "%-*.*s", thispfield, thispfield, " ");
+                     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+                        sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
+                     else
+                        sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                      break;
 
                   case IPPROTO_TCP:
                   case IPPROTO_UDP:
-                     if (RaPrintIndex > 0)
+                     if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
+			 (RaFieldDelimiter == '\0'))) {
                         if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                              (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                            if (RaFieldDelimiter == '\0')
                               if (buf[strlen(buf) - 1] == ' ')
                                  buf[strlen(buf) - 1] = '.';
-
+		     }
                      if (argus->ahdr.status & ARGUS_MERGED)
                         sprintf (buf, "%-*.*s ", thispfield, thispfield, "*");
                      else 
-                        sprintf (buf, "%-*d ", thispfield, port);
+                        sprintf (buf, "%-*d", thispfield, port);
+                     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+                        sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
+                     else
+                        sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                      break;
                }
             }
          }
 
@@ -1773,20 +1767,13 @@
       }
 
       default:
          thispfield -= 2;
 
-         if ((ArgusThisProto == 0) && (proto != 0)) {
-            sprintf (buf, "%-*.*s ", thispfield, thispfield, llcsap_string((unsigned char) port));
-         } else {
+         if ((ArgusThisProto == 0) && (proto != 0)) 
+            sprintf (buf, "%-*.*s", thispfield, thispfield, llcsap_string((unsigned char) port));
 
-            if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
-               sprintf (buf, "%c", RaFieldDelimiter);
-            } else {
-               sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
-            }
-         }
    }
 
 }
 
 
@@ -1967,11 +1954,11 @@
                sprintf (dirStr, "  <->  ");
             break;
       }
    }
 
-   sprintf (buf, "%s ", dirStr);
+   sprintf (buf, "%s", dirStr);
 }
 
 void
 ArgusPrintCounts (char *buf, struct ArgusRecord *argus)
 {
@@ -1984,11 +1971,11 @@
    } else {
       src_count = argus->argus_far.src.count;
       dst_count = argus->argus_far.dst.count;
    }
 
-   sprintf (buf, "%-8u %-8u  ", src_count, dst_count);
+   sprintf (buf, "%-8u%c%-8u", src_count,RaFieldDelimiter, dst_count);
 }
 
 void
 ArgusPrintSrcPackets (char *buf, struct ArgusRecord *argus)
 {
@@ -1999,11 +1986,11 @@
        
    } else {
       src_count = argus->argus_far.src.count;
    }
  
-   sprintf (buf, "%-8u ", src_count);
+   sprintf (buf, "%-8u", src_count);
 }
 
 void
 ArgusPrintDstPackets (char *buf, struct ArgusRecord *argus)
 {
@@ -2014,11 +2001,11 @@
        
    } else {
       dst_count = argus->argus_far.dst.count;
    }
  
-   sprintf (buf, "%-8u ", dst_count);
+   sprintf (buf, "%-8u", dst_count);
 }
 
 void
 ArgusPrintBytes (char *buf, struct ArgusRecord *argus)
 {
@@ -2036,11 +2023,11 @@
          src_bytes = argus->argus_far.src.bytes;
          dst_bytes = argus->argus_far.dst.bytes;
       }
    }
 
-   sprintf (buf, "%-12u %-12u", src_bytes, dst_bytes);
+   sprintf (buf, "%-12u%c%-12u", src_bytes, RaFieldDelimiter, dst_bytes);
 }
 
 void
 ArgusPrintSrcBytes (char *buf, struct ArgusRecord *argus)
 {
@@ -2075,12 +2062,10 @@
       }
 
    sprintf (buf, "%-12u", dst_bytes);
 }
 
-
-
 #include <math.h>
 
 void
 ArgusPrintSrcJitter (char *buf, struct ArgusRecord *argus)
 {
@@ -2090,12 +2075,12 @@
 }
 
 void
 ArgusPrintDstJitter (char *buf, struct ArgusRecord *argus)
 {
-   RaPrintSrcTime = 1;
-   RaPrintDstTime = 0;
+   RaPrintSrcTime = 0;
+   RaPrintDstTime = 1;
    ArgusPrintJitter (buf, argus);
 }
 
 void
 ArgusPrintJitter (char *buf, struct ArgusRecord *argus)
@@ -2145,15 +2130,22 @@
          sprintf (stdstr, "%d.%03d", istdev/1000, istdev%1000);
          stdstr[6] = '\0';
          sprintf (jitterstr, "%6d.%03d (%6s)", meanval/1000, meanval%1000, stdstr);
 */
          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
-         sprintf (&buf[strlen(buf)], "%-12s ", jitterstr);
+         sprintf (&buf[strlen(buf)], "%-12s", jitterstr);
 
       } else {
          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
-         sprintf (&buf[strlen(buf)], "%-12s ", jitterstr);
+         sprintf (&buf[strlen(buf)], "%-12s", jitterstr);
+      }
+
+      if (RaPrintDstTime) {
+         if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+            sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+         else 
+            sprintf(&buf[strlen(buf)], "%c", ' ');
       }
    }
 
    if (RaPrintDstTime) {
       bzero (stdstr, 128);
@@ -2318,16 +2310,21 @@
    else
       sprintf (ptr, "%.2f", 0.0);
 
    sprintf (buf, "%10s", ptr);
 
+   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+      sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+   else
+      sprintf(&buf[strlen(buf)], "%c", ' ');
+
    if (dst_count > 1)
       sprintf (ptr, "%.2f", ((double)(dst_count)/seconds));
    else
       sprintf (ptr, "%.2f", 0.0);
 
-   sprintf (&buf[strlen(buf)], "%10s  ", ptr);
+   sprintf (&buf[strlen(buf)], "%10s", ptr);
 }
 
 /*
 
 struct ArgusTCPObjectMetrics {
@@ -2441,15 +2438,23 @@
       seconds = (double)(time->tv_sec * 1.0) + (double)(time->tv_usec/1000000.0);
 
       if (seconds) {
          sprintf (ptr, "%.4f", ((double)srcLossPkts));
          sprintf (buf, "%10s", ptr);
+         if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+            sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+         else
+            sprintf(&buf[strlen(buf)], "%c", ' ');
          sprintf (ptr, "%.4f", ((double)dstLossPkts));
-         sprintf (&buf[strlen(buf)], "%10s  ", ptr);
+         sprintf (&buf[strlen(buf)], "%10s", ptr);
       } else {
          sprintf (ptr, "%.4f", 0.0);
          sprintf (buf, "%10s", ptr);
+         if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+            sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+         else
+            sprintf(&buf[strlen(buf)], "%c", ' ');
          sprintf (ptr, "%.4f", 0.0);
          sprintf (&buf[strlen(buf)], "%10s  ", ptr);
       }
    }
 }
@@ -2490,14 +2495,14 @@
       src_bytes = argus->argus_far.src.bytes;
    }
 
    if (seconds) {
       sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
-      sprintf (&buf[strlen(buf)], "%11s ", ptr);
+      sprintf (&buf[strlen(buf)], "%11s", ptr);
    } else {
       sprintf (ptr, "%.2f", 0.0);
-      sprintf (&buf[strlen(buf)], "%11s ", ptr);
+      sprintf (&buf[strlen(buf)], "%11s", ptr);
    }
 }
 
 
 void
@@ -2536,24 +2541,24 @@
       dst_bytes = argus->argus_far.dst.bytes;
    }
 
    if (seconds) {
       sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
-      sprintf (&buf[strlen(buf)], "%13s  ", ptr);
+      sprintf (&buf[strlen(buf)], "%13s", ptr);
    } else {
       sprintf (ptr, "%.2f", 0.0);
-      sprintf (&buf[strlen(buf)], "%13s  ", ptr);
+      sprintf (&buf[strlen(buf)], "%13s", ptr);
    }
 }
 
 void
 ArgusPrintLoad (char *buf, struct ArgusRecord *argus)
 {
    int src_count = 0, dst_count = 0, src_bytes = 0, dst_bytes = 0;
    struct timeval *start = NULL, *last = NULL;
    struct timeval  timebuf,  *time = &timebuf;
-   char tmpbuf[128], *ptr = tmpbuf;
+   char tmpbuf[128], *ptr = tmpbuf, delim = ' ';
    double seconds;
 
    start = &argus->argus_far.time.start;
    last  = &argus->argus_far.time.last;
 
@@ -2581,21 +2586,24 @@
       dst_bytes = argus->argus_far.dst.appbytes;
    } else {
       src_bytes = argus->argus_far.src.bytes;
       dst_bytes = argus->argus_far.dst.bytes;
    }
+	
+   if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+      delim = RaFieldDelimiter;
 
    if (seconds) {
       sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
-      sprintf (buf, "%13s", ptr);
+      sprintf (buf, "%13s%c", ptr, delim);
       sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
-      sprintf (&buf[strlen(buf)], "%13s  ", ptr);
+      sprintf (&buf[strlen(buf)], "%13s", ptr);
    } else {
       sprintf (ptr, "%.2f", 0.0);
-      sprintf (buf, "%13s", ptr);
+      sprintf (buf, "%13s%c", ptr, delim);
       sprintf (ptr, "%.2f", 0.0);
-      sprintf (&buf[strlen(buf)], "%13s  ", ptr);
+      sprintf (&buf[strlen(buf)], "%13s", ptr);
    }
 }
 
 void
 ArgusPrintSrcTTL (char *buf, struct ArgusRecord *argus)
@@ -2606,13 +2614,13 @@
       for (i = 1; i < 257; i <<= 1) {
          if ((sdis < 0) && (argus->argus_far.attr_ip.sttl <= i)) {
             sdis = i - argus->argus_far.attr_ip.sttl;
          }
       }
-      sprintf (&buf[strlen(buf)], "  %3d  ", sdis);
+      sprintf (&buf[strlen(buf)], "  %3d", sdis);
    } else
-      sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.sttl);
+      sprintf (&buf[strlen(buf)], "  %3d", argus->argus_far.attr_ip.sttl);
 }
 
 void
 ArgusPrintDstTTL (char *buf, struct ArgusRecord *argus)
 {
@@ -2622,63 +2630,74 @@
       for (i = 1; i < 257; i <<= 1) {
          if ((ddis < 0) && (argus->argus_far.attr_ip.dttl <= i)) {
             ddis = i - argus->argus_far.attr_ip.dttl;
          }
       }
-      sprintf (&buf[strlen(buf)], "  %3d  ", ddis);
+      sprintf (&buf[strlen(buf)], "  %3d", ddis);
  
    } else
-      sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.dttl);
+      sprintf (&buf[strlen(buf)], "  %3d", argus->argus_far.attr_ip.dttl);
 }
 
 void
 ArgusPrintVLAN (char *buf, struct ArgusRecord *argus)
 {
    if (ArgusThisFarStatus & ARGUS_VLAN_DSR_STATUS) {
       struct ArgusVlanStruct *vlan = (struct ArgusVlanStruct *) ArgusThisFarHdrs[ARGUS_VLAN_DSR_INDEX];
  
       if (vlan->status & ARGUS_SRC_VLAN)
-         sprintf (&buf[strlen(buf)], "0x%04x ", vlan->sid);
+         sprintf (&buf[strlen(buf)], "0x%04x%c", vlan->sid, RaFieldDelimiter);
       else
-         sprintf(&buf[strlen(buf)], "       ");
+	 if (RaFieldDelimiter == ' ') 
+            sprintf(&buf[strlen(buf)], "       ");
+	 else 
+            sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
       if (vlan->status & ARGUS_DST_VLAN)
-         sprintf (&buf[strlen(buf)], "0x%04x ", vlan->did);
+         sprintf (&buf[strlen(buf)], "0x%04x", vlan->did);
       else
-         sprintf(&buf[strlen(buf)], "       ");
+	 if (RaFieldDelimiter == ' ')
+            sprintf(&buf[strlen(buf)], "      ");
    } else
-      sprintf (&buf[strlen(buf)], "              ");
+      if (RaFieldDelimiter == ' ') 
+         sprintf (&buf[strlen(buf)], "             ");
+      else 
+	 sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
 }
 
 void
 ArgusPrintMPLS (char *buf, struct ArgusRecord *argus)
 {
    if (ArgusThisFarStatus & ARGUS_MPLS_DSR_STATUS) {
       struct ArgusMplsStruct *mpls = (struct ArgusMplsStruct *) ArgusThisFarHdrs[ARGUS_MPLS_DSR_INDEX];
  
       if (mpls->status & ARGUS_SRC_MPLS)
-         sprintf (&buf[strlen(buf)], " %5x ", mpls->slabel);
+         sprintf (&buf[strlen(buf)], "%5x%c", mpls->slabel, RaFieldDelimiter);
       else
-         sprintf(&buf[strlen(buf)], "       ");
+         sprintf(&buf[strlen(buf)], "     %c", RaFieldDelimiter);
 
       if (mpls->status & ARGUS_DST_MPLS)
-         sprintf (&buf[strlen(buf)], " %5x ", mpls->dlabel);
+         sprintf (&buf[strlen(buf)], "%5x", mpls->dlabel);
       else
-         sprintf(&buf[strlen(buf)], "       ");
+	 if (RaFieldDelimiter == ' ')
+            sprintf(&buf[strlen(buf)], "     ");
    } else 
-      sprintf (&buf[strlen(buf)], "              ");
+	 if (RaFieldDelimiter == ' ')
+            sprintf(&buf[strlen(buf)], "     ");
+	 else 
+            sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
 }
 
 void
 ArgusPrintSrcTOS (char *buf, struct ArgusRecord *argus)
 {
-   sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.stos);
+   sprintf (&buf[strlen(buf)], "  %3d ", argus->argus_far.attr_ip.stos);
 }
 
 void
 ArgusPrintDstTOS (char *buf, struct ArgusRecord *argus)
 {
-   sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.dtos);
+   sprintf (&buf[strlen(buf)], "  %3d" , argus->argus_far.attr_ip.dtos);
 }
 
 
 void
 ArgusPrintWindow (char *buf, struct ArgusRecord *argus)
@@ -2692,19 +2711,19 @@
             tcp = (struct ArgusTCPObject *)ArgusThisFarHdrs[ARGUS_TCP_DSR_INDEX];
 
          if (tcp != NULL) {
             srcwin = tcp->src.win;
             dstwin = tcp->dst.win;
-            sprintf (&buf[strlen(buf)], "%-5d  %-5d  ", srcwin, dstwin);
+            sprintf (&buf[strlen(buf)], "%-5d%c%-5d", srcwin, RaFieldDelimiter, dstwin);
          } else {
-            sprintf (&buf[strlen(buf)], "%14s", " ");
+            sprintf (&buf[strlen(buf)], "%5s%c%5s", " ", RaFieldDelimiter, " ");
          }
          break;
       }
 
       default:
-         sprintf (&buf[strlen(buf)], "%14s", " ");
+         sprintf (&buf[strlen(buf)], "%5s%c%5s", " ", RaFieldDelimiter, " ");
    }
 }
 
 void
 ArgusPrintTCPExtensions (char *buf, struct ArgusRecord *argus)
@@ -2848,13 +2867,17 @@
 
    bzero (argus_strbuf, MAXSTRLEN);
    bzero (tmpbuf, MAXSTRLEN);
 
    for (RaPrintIndex = 0; RaPrintIndex < MAX_PRINT_ALG_TYPES; RaPrintIndex++) {
-      if (RaPrintAlgorithms[RaPrintIndex] != NULL)
+      if (RaPrintAlgorithms[RaPrintIndex] != NULL) {
          RaPrintAlgorithms[RaPrintIndex](&argus_strbuf[strlen(argus_strbuf)], argus);
-      else
+         if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+            sprintf(&argus_strbuf[strlen(argus_strbuf)], "%c", RaFieldDelimiter);
+         else
+            sprintf(&argus_strbuf[strlen(argus_strbuf)], "%c", ' ');
+      } else
          break;
    }
 
    while (isspace((int)(argus_strbuf[strlen(argus_strbuf) - 1])))
       argus_strbuf[strlen(argus_strbuf) - 1] = '\0';
@@ -2880,17 +2903,12 @@
               *--ptr = '\0';
          }
       }
 
       while (*str) {
-         if (*str == ' ') {
-            if (lastchr != RaFieldDelimiter)
-               *ptr++ = RaFieldDelimiter;
+         if (*str == ' ') 
             while (isspace((int)*str)) str++;
-         }
-         lastchr = *str;
-
          *ptr++ = *str++;
       }
 
       if (tmpbuf[strlen(tmpbuf) - 1] == RaFieldDelimiter)
          tmpbuf[strlen(tmpbuf) - 1] = '\0';
@@ -3225,11 +3243,11 @@
    char delim = ' ';
 
    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
       delim = RaFieldDelimiter;
 
-   if ((ArgusSrcUserDataLen > 0) || (ArgusDstUserDataLen)) {
+   if ((ArgusSrcUserDataLen > 0) || (ArgusDstUserDataLen > 0)) {
       if (ArgusSrcUserDataLen > 0) {
          switch (eflag) {
             case ARGUS_ENCODE_ASCII:
                exlen = ArgusSrcUserDataLen;
                break;
@@ -3251,26 +3269,25 @@
             len = len > ArgusSrcUserDataLen ? ArgusSrcUserDataLen : len;
      
             bzero (strbuf, sizeof(strbuf));
             bzero (conbuf, sizeof(conbuf));
             if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
-               sprintf (con, "%cs[%d]=%s", delim, len, str);
+               sprintf (con, "s[%d]=%s", len, str);
             else
                sprintf (con, " ");
 
             if (delim == ' ')
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, con);
+               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s", exlen, con);
             else
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s ", con);
+               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s", con);
 
-         } else {
-            if (delim != ' ')
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
-            else
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
          }
       }
+      if (delim != ' ')
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
+      else
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
 
       if (ArgusDstUserDataLen > 0) {
          switch (eflag) {
             case ARGUS_ENCODE_ASCII:
                exlen = ArgusDstUserDataLen;
@@ -3294,27 +3311,31 @@
             len = len > ArgusDstUserDataLen ? ArgusDstUserDataLen : len;
       
             bzero (strbuf, sizeof(strbuf));
             bzero (conbuf, sizeof(conbuf));
             if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
-               sprintf (con, "%cd[%d]=%s", delim, len, str);
+               sprintf (con, "d[%d]=%s", len, str);
             else
                sprintf (con, " ");
 
             if (delim == ' ')
                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, con);
             else
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s ", con);
+               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s", con);
 
-         } else
-            if (delim != ' ')
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
-            else
-               sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
+         }
       }
+      if (delim != ' ')
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
+      else
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
 
-      sprintf (&RaUserDataStr[strlen(RaUserDataStr)], " ");
+   } else {
+      if (delim != ' ')
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
+      else
+         sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s %-*s ", exlen, " ", exlen, " ");
    }
 }
 
 
 static char basis_64[] =