/[monit]/monit/p.y
ViewVC logotype

Diff of /monit/p.y

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.70 by hauk, Fri Jun 6 16:43:06 2003 UTC revision 1.71 by martinp, Mon Jun 9 19:33:42 2003 UTC
# Line 124  Line 124 
124      int  action;      int  action;
125    };    };
126    
127      struct DeviceSet {
128        int  resource;
129        int  operator;
130        long limit_absolute;
131        int  limit_percent;
132        int  action;
133      };
134    
135    /* yacc interface */    /* yacc interface */
136    void  yyerror(const char *);    void  yyerror(const char *);
137    
# Line 141  Line 149 
149    static Process_T depend_list= NULL;    static Process_T depend_list= NULL;
150    static struct IHavePrecedence ihp= {FALSE, FALSE, FALSE};    static struct IHavePrecedence ihp= {FALSE, FALSE, FALSE};
151    static struct MailFilter mtf= {NULL, NULL, NULL, FALSE, FALSE, FALSE,    static struct MailFilter mtf= {NULL, NULL, NULL, FALSE, FALSE, FALSE,
152                                   FALSE, FALSE, FALSE};      FALSE, FALSE, FALSE};
153    static struct PortSet portset= {-1, NULL, 0, SOCK_STREAM, AF_INET, FALSE,    static struct PortSet portset= {-1, NULL, 0, SOCK_STREAM, AF_INET, FALSE,
154                                    SSL_VERSION_AUTO, NULL, NULL, NULL, NULL};      SSL_VERSION_AUTO, NULL, NULL, NULL, NULL};
155    static struct ResourceSet resourceset= {0, 0, OPERATOR_EQUAL, 1,    static struct ResourceSet resourceset= {0, 0, OPERATOR_EQUAL, 1,
156                                            ACTION_ALERT};      ACTION_ALERT};
157    static struct TimestampSet timestampset= {NULL, OPERATOR_EQUAL, 0,    static struct TimestampSet timestampset= {NULL, OPERATOR_EQUAL, 0,
158                                              ACTION_ALERT};      ACTION_ALERT};
159      static struct DeviceSet deviceset= {0, OPERATOR_EQUAL, -1, -1, ACTION_ALERT};
160    
161    /* Private prototypes */    /* Private prototypes */
162    static void initialize();    static void initialize();
163    static void addprocess(Process_T);    static void addprocess(Process_T);
164    static void addmail(char *, struct MailFilter *);    static void addmail(char *, struct MailFilter *);
165    static void createprocess(char *, char *);    static void createprocess(int, char *, char *);
166    static void adddependant(char *);    static void adddependant(char *);
167    static void addchecksum(char *, char *);    static void addchecksum(char *, char *);
168    static void addport(struct PortSet *);    static void addport(struct PortSet *);
169    static void addresource(struct ResourceSet *);    static void addresource(struct ResourceSet *);
170    static void addtimestamp(struct TimestampSet *);    static void addtimestamp(struct TimestampSet *);
171      static void adddevice(struct DeviceSet *);
172    static void *addprotocol(int);    static void *addprotocol(int);
173    static void addcommand(int);    static void addcommand(int);
174    static void addargument(char *);    static void addargument(char *);
# Line 174  Line 184 
184    static void reset_portset();    static void reset_portset();
185    static void reset_resourceset();    static void reset_resourceset();
186    static void reset_timestampset();    static void reset_timestampset();
187      static void reset_deviceset();
188    static void check_name(char *);    static void check_name(char *);
189    static void check_timeout(int, int);    static void check_timeout(int, int);
190    static void check_every (int);    static void check_every(int);
191      static int  check_perm(int);
192    static void check_hostname (char *);    static void check_hostname (char *);
193    static void createprocinfo();    static void createinfo();
194    static char *append_hostname(char *);    static char *append_hostname(char *);
195    static void cleanup_md5_string(char *);    static void cleanup_md5_string(char *);
196    static void check_depend();    static void check_depend();
# Line 195  Line 207 
207    
208  %token SET LOGFILE DAEMON SYSLOG MAILSERVER HTTPD ALLOW ADDRESS INIT  %token SET LOGFILE DAEMON SYSLOG MAILSERVER HTTPD ALLOW ADDRESS INIT
209  %token PEMFILE ENABLE DISABLE HTTPDSSL CLIENTPEMFILE ALLOWSELFCERTIFICATION  %token PEMFILE ENABLE DISABLE HTTPDSSL CLIENTPEMFILE ALLOWSELFCERTIFICATION
210  %token CHECK PIDFILE START STOP  %token CHECK PIDFILE START STOP PATHTOK
211  %token HOST PORT TYPE UDP TCP TCPSSL PROTOCOL FACILITY  %token HOST PORT TYPE UDP TCP TCPSSL PROTOCOL FACILITY
212  %token ALERT MAILFORMAT UNIXSOCKET  %token ALERT MAILFORMAT UNIXSOCKET
213  %token TIMEOUT RESTART CHECKSUM EXPECT EVERY  %token TIMEOUT RESTART CHECKSUM EXPECT EVERY
# Line 211  Line 223 
223  %token UID GID ENVIRONMENT  %token UID GID ENVIRONMENT
224  %token TIMESTAMP SECOND MINUTE HOUR DAY  %token TIMESTAMP SECOND MINUTE HOUR DAY
225  %token SSLAUTO SSLV2 SSLV3 TLSV1  %token SSLAUTO SSLV2 SSLV3 TLSV1
226    %token PERCENT BYTE KILOBYTE MEGABYTE GIGABYTE
227    %token DIRECTORY FILETOK DEVICE PROCESS
228    %token INODE SPACE PERM
229    
230  %left GREATER LESS EQUAL NOTEQUAL  %left GREATER LESS EQUAL NOTEQUAL
231    
# Line 230  statement       : setdaemon Line 245  statement       : setdaemon
245                  | sethttpd                  | sethttpd
246                  | setpid                  | setpid
247                  | setinit                  | setinit
248                  | check optionlist                  | checkproc optproclist
249                    | checkfile optfilelist
250                    | checkdev optdevlist
251                    | checkdir optdirlist
252                  ;                  ;
253    
254  optionlist      : /* EMPTY */  optproclist     : /* EMPTY */
255                  | optionlist optionstatement                  | optproclist optproc
256                  ;                  ;
257    
258  optionstatement : start  optproc         : start
259                  | stop                  | stop
260                  | host port type protocol {                  | host port type protocol {
261                     addport(&portset);                     addport(&portset);
# Line 262  optionstatement : start Line 280  optionstatement : start
280                    }                    }
281                  ;                  ;
282    
283    optfilelist      : /* EMPTY */
284                    | optfilelist optfile
285                    ;
286    
287    optfile         : start
288                    | stop
289                    | timestamp {
290                       addtimestamp(&timestampset);
291                      }
292                    | timeout
293                    | every
294                    | alert
295                    | perm
296                    | checksum
297                    | autostart
298                    | mode
299                    | group
300                    | depend
301                    ;
302    
303    optdevlist      : /* EMPTY */
304                    | optdevlist optdev
305                    ;
306    
307    optdev          : start
308                    | stop
309                    | timeout
310                    | every
311                    | alert
312                    | autostart
313                    | mode
314                    | group
315                    | depend
316                    | inode {
317                       adddevice(&deviceset);
318                      }
319                    | space {
320                       adddevice(&deviceset);
321                      }
322                    ;
323    
324    optdirlist      : /* EMPTY */
325                    | optdirlist optdir
326                    ;
327    
328    optdir          : start
329                    | stop
330                    | timestamp {
331                       addtimestamp(&timestampset);
332                      }
333                    | timeout
334                    | every
335                    | alert
336                    | perm
337                    | checksum
338                    | autostart
339                    | mode
340                    | group
341                    | depend
342                    ;
343    
344  setdaemon       : SET DAEMON NUMBER  {  setdaemon       : SET DAEMON NUMBER  {
345                     if(!Run.isdaemon || ihp.daemon) {                     if(!Run.isdaemon || ihp.daemon) {
346                       ihp.daemon= TRUE;                       ihp.daemon= TRUE;
# Line 407  allow           : ALLOW STRING':'STRING Line 486  allow           : ALLOW STRING':'STRING
486                   }                   }
487                  ;                  ;
488    
489  check           : CHECK STRING PIDFILE PATH {  checkproc       : CHECK PROCESS STRING PIDFILE PATH {
490                     createprocess($2,$4);                     createprocess(TASK_PROCESS, $3,$5);
491                     check_name($2);                     check_name($3);
492                      }
493                    | CHECK PROCESS STRING PATHTOK PATH {
494                       createprocess(TASK_PROCESS, $3,$5);
495                       check_name($3);
496                      }
497                    ;
498    
499    checkfile       : CHECK FILETOK STRING PATHTOK PATH {
500                       createprocess(TASK_FILE, $3,$5);
501                       check_name($3);
502                      }
503                    ;
504    
505    checkdev        : CHECK DEVICE STRING PATHTOK PATH {
506                       createprocess(TASK_DEVICE, $3,$5);
507                       check_name($3);
508                      }
509                    ;
510    
511    checkdir        : CHECK DIRECTORY STRING PATHTOK PATH {
512                       createprocess(TASK_DIRECTORY, $3,$5);
513                       check_name($3);
514                    }                    }
515                  ;                  ;
516    
# Line 662  action          : ALERT       { $<number Line 763  action          : ALERT       { $<number
763                  | STOP        { $<number>$= ACTION_STOP; }                  | STOP        { $<number>$= ACTION_STOP; }
764                  ;                  ;
765    
766    inode           : INODE operator NUMBER action {
767                        deviceset.resource= RESOURCE_INODE;
768                        deviceset.operator= $<number>2;
769                        deviceset.limit_absolute= $3;
770                        deviceset.action= $<number>4;
771                      }
772                    | INODE operator NUMBER PERCENT action {
773                        deviceset.resource= RESOURCE_INODE;
774                        deviceset.operator= $<number>2;
775                        deviceset.limit_percent= $<number>3;
776                        deviceset.action= $<number>5;
777                      }
778                    ;
779    
780    space           : SPACE operator NUMBER unit action {
781    
782                        DeviceInfo_T di= NEW(di);
783    
784                        get_fsusage(current->path, di);
785    
786                        deviceset.resource= RESOURCE_SPACE;
787                        deviceset.operator= $<number>2;
788                        deviceset.limit_absolute= (int)( (float)$3 / (float)di->f_bsize * (float)$<number>4 );
789                        deviceset.action= $<number>5;
790    
791                        free(di);
792    
793                      }
794                    | SPACE operator NUMBER PERCENT action {
795                        deviceset.resource= RESOURCE_SPACE;
796                        deviceset.operator= $<number>2;
797                        deviceset.limit_percent= $<number>3;
798                        deviceset.action= $<number>5;
799                      }
800                    ;
801    
802    unit            : BYTE     { $<number>$= UNIT_BYTE; }
803                    | KILOBYTE { $<number>$= UNIT_KILOBYTE; }
804                    | MEGABYTE { $<number>$= UNIT_MEGABYTE; }
805                    | GIGABYTE { $<number>$= UNIT_GIGABYTE; }
806                    ;
807    
808    perm            : PERM NUMBER { current->perm=check_perm($2); }
809                    ;
810    
811  %%  %%
812    
813    
# Line 715  int parse(char *controlfile) { Line 861  int parse(char *controlfile) {
861        /* If defined - add the last process to the process list */        /* If defined - add the last process to the process list */
862        if(current) {        if(current) {
863                    
864          createprocinfo();          createinfo();
865          addprocess(current);          addprocess(current);
866                    
867        }        }
# Line 760  static void initialize() { Line 906  static void initialize() {
906   * Create a new process object and add any current objects to the   * Create a new process object and add any current objects to the
907   * process list.   * process list.
908   */   */
909  static void createprocess(char *name, char *pidfile) {  static void createprocess(int task, char *name, char *path) {
910    
911    ASSERT(name);    ASSERT(name);
912    ASSERT(pidfile);    ASSERT(path);
913    
914    if(current) {    if(current) {
915    
916      createprocinfo();      createinfo();
917      addprocess(current);      addprocess(current);
918            
919    }    }
# Line 784  static void createprocess(char *name, ch Line 930  static void createprocess(char *name, ch
930    current->do_validate= TRUE;    current->do_validate= TRUE;
931    current->mode= MODE_ACTIVE;    current->mode= MODE_ACTIVE;
932    
933      current->task= task;
934    current->name= name;    current->name= name;
935    current->pidfile= pidfile;    current->path= path;
936    current->group= NULL;    current->group= NULL;
937    current->dependantlist= NULL;    current->dependantlist= NULL;
938      current->perm= -1;
939    
940    pthread_mutex_init(&current->mutex, NULL);    pthread_mutex_init(&current->mutex, NULL);
941    
# Line 803  static void addprocess(Process_T p) { Line 951  static void addprocess(Process_T p) {
951    
952    ASSERT(p);    ASSERT(p);
953    
   /* if process is already running... set validate true  */  
   if (is_process_running(p))  
       p->do_validate= TRUE;  
   
954    n= NEW(n);    n= NEW(n);
955    memcpy(n, p, sizeof(*p));    memcpy(n, p, sizeof(*p));
956    
# Line 1061  static void addtimestamp(struct Timestam Line 1205  static void addtimestamp(struct Timestam
1205    
1206    
1207  /*  /*
1208   * Adds procfs check data to current process procinfo   * Add a new device to the current tasks device list
1209     */
1210    static void adddevice(struct DeviceSet *ds) {
1211    
1212      Device_T d= NEW(d);
1213    
1214      ASSERT(ds);
1215    
1216      d->resource= ds->resource;
1217      d->operator= ds->operator;
1218      d->limit_absolute= ds->limit_absolute;
1219      d->limit_percent= ds->limit_percent;
1220      d->action= ds->action;
1221    
1222      d->next= current->devicelist;
1223      current->devicelist= d;
1224    
1225      reset_deviceset();
1226    
1227    }
1228    
1229    
1230    /*
1231     * Adds runtime info to current process
1232   */   */
1233  static void createprocinfo() {  static void createinfo() {
1234    
1235      DeviceInfo_T di= NEW(di);
1236    ProcInfo_T pi= NEW(pi);    ProcInfo_T pi= NEW(pi);
1237    
1238      current->devinfo=di;
1239    current->procinfo=pi;    current->procinfo=pi;
1240        
1241  }  }
# Line 1293  static void setlogfile(char *logfile) { Line 1462  static void setlogfile(char *logfile) {
1462    
1463    
1464  /*  /*
1465   * Reset the pidfil if changed   * Reset the pidfile if changed
1466   */   */
1467  static void setpidfile(char *pidfile) {  static void setpidfile(char *pidfile) {
1468    
# Line 1470  static void reset_timestampset() { Line 1639  static void reset_timestampset() {
1639  }  }
1640    
1641    
1642    /*
1643     * Reset the Device set to default values
1644     */
1645    static void reset_deviceset() {
1646    
1647      deviceset.resource= 0;
1648      deviceset.operator= OPERATOR_EQUAL;
1649      deviceset.limit_absolute= -1;
1650      deviceset.limit_percent= -1;
1651      deviceset.action= ACTION_ALERT;
1652    
1653    }
1654    
1655    
1656  /* ---------------------------------------------------------------- Checkers */  /* ---------------------------------------------------------------- Checkers */
1657    
1658    
# Line 1491  static void check_name(char *name) { Line 1674  static void check_name(char *name) {
1674        
1675  }  }
1676    
1677    
1678    /*
1679     * Permission statement semantic check
1680     */
1681    static int check_perm(int perm) {
1682    
1683      long result;
1684      char *status;
1685      char buf[STRLEN];
1686    
1687      snprintf(buf, STRLEN, "%d", perm);
1688    
1689      result= strtol(buf, &status, 8);
1690    
1691      if( *status != '\0' || result < 0 || result > 07777 ) {
1692        
1693        yyerror("An permission statement must have an octal value between 0 and 07777.");
1694        
1695      }
1696    
1697      return result;
1698      
1699    }
1700    
1701    
1702  /*  /*
1703   * Timeout statement semantic check   * Timeout statement semantic check

Legend:
Removed from v.1.70  
changed lines
  Added in v.1.71

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26