~ubuntu-branches/debian/lenny/argus/lenny

« back to all changes in this revision

Viewing changes to server/argus.c

  • Committer: Bazaar Package Importer
  • Author(s): Yotam Rubin
  • Date: 2002-03-11 20:26:31 UTC
  • Revision ID: james.westby@ubuntu.com-20020311202631-mgj3eqwl4c932cgh
Tags: 2.0.5.beta.5-3
Fixed postinst failure when no PPP interfaces are present.
Closes: Bug#137884

Show diffs side-by-side

added added

removed removed

Lines of Context:
92
92
   fprintf (stderr, "         -U <bytes>           specify the number of user bytes to capture.\n");
93
93
   fprintf (stderr, "         -w <file [\"filter\"]> write output to <file>, or '-', for stdout,\n");
94
94
   fprintf (stderr, "                              against optional filter expression.\n");
 
95
   fprintf (stderr, "         -n                   generate a PID file.\n");
 
96
   fprintf (stderr, "         -c <file>            create pidfile at <file>\n");
95
97
   fprintf (stderr, "         -X                   reset argus configuration.\n");
96
98
   exit (-1);
97
99
}
123
125
#include <ctype.h>
124
126
 
125
127
 
126
 
static char ArgusPidFileName[MAXPATHNAMELEN];
 
128
static char ArgusPidFileName[MAXPATHNAMELEN] = "";
127
129
char * ArgusCreatePIDFile (char *, char *);
 
130
int ArgusWritePIDFile(char *path);
128
131
 
129
132
#define ARGUS_MAX_INSTANCES     5
130
133
 
141
144
   if (stat ("/var/run", &statbuf) == 0)
142
145
      homepath = "/var/run";
143
146
 
144
 
   if ((appname != NULL) && ((dev = getArgusDevice()) != NULL) && (homepath != NULL)) {
 
147
   if ((appname != NULL) && ((dev = getArgusDevice()) != NULL) 
 
148
        && (homepath != NULL) && (strlen(ArgusPidFileName) == 0) ) {
145
149
      for (i = 0; i < ARGUS_MAX_INSTANCES; i++) {
146
150
         snprintf (ArgusPidFileName, MAXPATHNAMELEN - 1, "%s/%s.%s.%d.pid", homepath, appname, getArgusDevice(), i);
147
151
         retn = ArgusPidFileName;
169
173
            break;
170
174
      }
171
175
 
172
 
      if (retn && ((fd = fopen (retn, "w+")) != NULL)) {
173
 
         pid = getpid();
174
 
         fprintf (fd, "%d\n", pid);
175
 
         fclose (fd);
176
 
      } else
 
176
      if (retn && ArgusWritePIDFile (retn) == 0 )
177
177
         retn = NULL;
178
178
   }
 
179
   else
 
180
        if ( (strlen(ArgusPidFileName) > 0) && 
 
181
             (ArgusWritePIDFile(ArgusPidFileName)) )
 
182
            retn = ArgusPidFileName;
 
183
        else
 
184
            retn = NULL;
179
185
 
180
186
#ifdef ARGUSDEBUG
181
187
   ArgusDebug (1, "ArgusCreatePIDFile(0x%x, 0x%x) returning %s\n", homepath, appname, retn);
184
190
   return (retn);
185
191
}
186
192
 
 
193
int ArgusWritePIDFile(char *path)
 
194
{
 
195
    FILE *fd = fopen(path, "w+");
 
196
    pid_t pid = getpid();
 
197
    
 
198
    if ( fd == NULL )
 
199
        return 0;
 
200
        
 
201
    fprintf (fd, "%d\n", pid);
 
202
    fclose (fd);
 
203
    
 
204
    return 1;
 
205
}
 
206
 
 
207
 
 
208
pid_t ArgusSessionId = 0;
187
209
 
188
210
char *ArgusPidFile = NULL;
189
 
pid_t ArgusSessionId = 0;
190
211
 
191
212
int
192
213
main (int argc, char *argv[])
253
274
   }
254
275
 
255
276
   opterr = 0;
256
 
   while ((op = getopt (argc, argv, "bB:dD:e:F:i:JmM:N:OP:pRr:S:tTU:w:Xh")) != EOF) {
 
277
   while ((op = getopt (argc, argv, "c:nbB:dD:e:F:i:JmM:N:OP:pRr:S:tTU:w:Xh")) != EOF) {
257
278
      switch (op) {
258
279
         case 'b': setArgusbpflag (1); break;
259
280
         case 'B': ArgusBindIP = strdup(optarg); break;
260
281
         case 'd': daemonflag++; break;
261
282
         case 'D': setArgusdflag (atoi (optarg)); break;
 
283
         case 'n': 
 
284
            setArguspidflag(1);
 
285
            break;
 
286
         case 'c':
 
287
            setArguspidflag(1);
 
288
            strncpy(ArgusPidFileName, optarg, MAXPATHNAMELEN - 1);
 
289
            break;
262
290
         case 'e': 
263
291
            if (optarg && isalnum((int)*optarg)) {
264
292
              if ((host = gethostbyname(optarg)) != NULL) {
546
574
   pidflag = value;
547
575
}
548
576
 
 
577
void 
 
578
setArguspidfilename (char *filename)
 
579
{
 
580
    strncpy(ArgusPidFileName, filename, MAXPATHNAMELEN - 1);
 
581
}
 
582
 
 
583
char *
 
584
getArguspidfilename ()
 
585
{
 
586
    return ArgusPidFileName;
 
587
}
 
588
 
549
589
int
550
590
getArguspidflag  ()
551
591
{
552
592
   return (pidflag);
553
593
}
554
594
 
555
 
#define ARGUS_RCITEMS                           19
 
595
#define ARGUS_RCITEMS                           20
556
596
 
557
597
#define ARGUS_DAEMON                            0
558
598
#define ARGUS_MONITOR_ID                        1
573
613
#define ARGUS_FILTER                            16
574
614
#define ARGUS_PACKET_CAPTURE_FILE               17
575
615
#define ARGUS_BIND_IP                           18
 
616
#define ARGUS_PID_FILE_NAME                     19
576
617
 
577
618
char *ArgusResourceFileStr [] = {
578
619
   "ARGUS_DAEMON=",
593
634
   "ARGUS_FILTER_OPTIMIZER=",
594
635
   "ARGUS_FILTER=",
595
636
   "ARGUS_PACKET_CAPTURE_FILE=",
596
 
   "ARGUS_BIND_IP="
 
637
   "ARGUS_BIND_IP=",
 
638
   "ARGUS_PID_FILE_NAME="
597
639
};
598
640
 
599
641
 
630
672
                        optarg[strlen(optarg) - 1] = '\0';
631
673
                     if (optarg[strlen(optarg) - 1] == '\"')
632
674
                        optarg[strlen(optarg) - 1] = '\0';
633
 
 
 
675
                     
634
676
                     switch (i) {
635
677
                        case ARGUS_DAEMON: 
636
678
                           if (!(strncasecmp(optarg, "yes", 3)))
713
755
                           else
714
756
                              setArguspidflag  (0);
715
757
                           break;
 
758
                        
 
759
                        case ARGUS_PID_FILE_NAME:
 
760
                                strncpy(ArgusPidFileName, optarg, MAXPATHNAMELEN - 1 );
 
761
                                setArguspidflag (1);
 
762
                        break;
 
763
                          
716
764
 
717
765
                        case ARGUS_GO_PROMISCUOUS:
718
766
                           if ((strncasecmp(optarg, "yes", 3)))