[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: configuration framework patch
From: |
Rory Toma |
Subject: |
Re: configuration framework patch |
Date: |
26 Sep 2002 16:55:27 -0700 |
Go for it. I don't use ldap, but I can see where I might want a SQL
based config.
On Thu, 2002-09-26 at 16:42, Martin Pala wrote:
> Hi,
>
> there's open interface framework patch for allowing monit to support
> more configuration sources in addition to present plaintext file. It is
> based on general interface, that can call optional sub-procedures for
> specific configuration sources. In the patch is for illustration
> attached void parse_ldap() function, that actually does nothing (it is
> the target for my next work). It works well on my station.
>
> If you agree this architectural modification, i can commit it to the CVS :)
>
> Greetings,
> Martin
>
> ----
>
> diff -Naur monit/files.c monit-devel/files.c
> --- monit/files.c 2002-09-27 00:31:30.000000000 +0200
> +++ monit-devel/files.c 2002-09-27 00:38:35.000000000 +0200
> @@ -128,8 +128,8 @@
> /**
> * Search the system for the monit control file. Try first
> * ~/.monitrc, if that fails try ./monitrc and finally /etc/monitrc.
> - * Exit the application if the control file is not found.
> - * @return The location of monits control file (monitrc)
> + * @return The location of monits control file (monitrc) or NULL if
> + * control file wasn't found
> */
> char *find_rcfile() {
>
> @@ -158,10 +158,7 @@
> if ( exist_file(rcfile) )
> return (rcfile);
>
> - error("%s: Cannot find the control file at ~/.%s, ./%s or at /etc/%s\n",
> - prog, MONITRC, MONITRC, MONITRC);
> -
> - exit(1);
> + return (NULL);
>
> }
>
> diff -Naur monit/ldap.c monit-devel/ldap.c
> --- monit/ldap.c 1970-01-01 01:00:00.000000000 +0100
> +++ monit-devel/ldap.c 2002-09-27 00:38:35.000000000 +0200
> @@ -0,0 +1,42 @@
> +/*
> + * Copyright (C), 2000-2002 by Contributors to the monit codebase.
> + * All Rights Reserved.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of the
> + * License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software Foundation,
> + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + */
> +
> +#include "monitor.h"
> +
> +/**
> + * LDAP access methods.
> + *
> + * @author Jan-Henrik Haukeland, <address@hidden>
> + * @author Martin Pala, <address@hidden>
> + *
> + * @version $Id$
> + *
> + * @file
> + */
> +
> +
> +/* ------------------------------------------------------------------ Public
> */
> +
> +
> +int parse_ldap() {
> +
> + return TRUE;
> +
> +}
> +
> diff -Naur monit/monitor.c monit-devel/monitor.c
> --- monit/monitor.c 2002-09-27 00:38:59.000000000 +0200
> +++ monit-devel/monitor.c 2002-09-27 00:38:35.000000000 +0200
> @@ -104,7 +104,7 @@
>
> /**
> * Initialize this application - Register signal handlers,
> - * Parse the control file and initialize the program's
> + * Parse the configuration and initialize the program's
> * datastructures and the log system.
> */
> static void do_init() {
> @@ -158,9 +158,9 @@
>
> /*
> * Start the Parser and create the process list. This will also set
> - * any Runtime constants defined in the controlfile.
> + * any Runtime constants defined in the configuration.
> */
> - if ( ! parse(Run.controlfile) ) {
> + if ( ! parse() ) {
>
> exit(1);
>
> @@ -208,7 +208,7 @@
> /* Run the garbage collector */
> gc();
>
> - if ( ! parse(Run.controlfile) ) {
> + if ( ! parse() ) {
>
> log("%s daemon died\n", prog);
> exit(1);
> diff -Naur monit/monitor.h monit-devel/monitor.h
> --- monit/monitor.h 2002-09-26 20:04:08.000000000 +0200
> +++ monit-devel/monitor.h 2002-09-27 00:38:35.000000000 +0200
> @@ -296,7 +296,9 @@
> char *url_encode(char *uri);
> char *get_basic_authentication_header();
> int set_md5sum(char **, char *);
> -int parse(char *);
> +int parse();
> +int parse_plain(char *);
> +int parse_ldap();
> void start();
> void start_group(char *);
> void start_process(Process_T);
> diff -Naur monit/p.y monit-devel/p.y
> --- monit/p.y 2002-09-26 20:04:09.000000000 +0200
> +++ monit-devel/p.y 2002-09-27 00:38:35.000000000 +0200
> @@ -130,7 +130,6 @@
> 1, RESOURCE_ACTION_ALERT };
>
> /* Private prototypes */
> - static void initialize();
> static void addprocess(Process_T);
> static void addmail(char *, struct MailFilter *);
> static void createprocess(char *, char *);
> @@ -146,7 +145,6 @@
> static void setuname(char *);
> static void setpasswd(char *);
> static void reset_mailfilter();
> - static void reset_runmail();
> static void reset_portset();
> static void reset_resourceset();
> static void check_name(char *);
> @@ -507,10 +505,10 @@
>
>
> /*
> - * The Parser hook - start parsing the control file
> - * Returns TRUE if parsing succeeded, otherwise FALSE
> + * Start parsing the plaintext control file
> + * @return TRUE if parsing succeeded, otherwise FALSE
> */
> -int parse(char *controlfile) {
> +int parse_plain(char *controlfile) {
>
> processlist= tail= current= NULL;
>
> @@ -524,15 +522,12 @@
>
> error("%s: Error opening the control file '%s' -- %s\n",
> prog, controlfile, STRERROR);
> +
> return(FALSE);
>
> }
>
> - /* Creation of the global process list is synchronized */
> - LOCK(Run.mutex)
> - initialize();
> - yyparse();
> - END_LOCK;
> + yyparse();
>
> fclose(yyin);
>
> @@ -552,26 +547,6 @@
> /* ----------------------------------------------------------------- Private
> */
>
>
> -/**
> - * Initialize objects. Placeholder for setting values that can change
> - * between cycles (changed config file) and not easily supported by
> - * the grammar implementation.
> - */
> -static void initialize() {
> -
> - destroy_hosts_allow();
> - Run.dolog= FALSE;
> - Run.dohttpd= FALSE;
> - Run.Auth.defined= FALSE;
> - reset_runmail();
> - if(Run.bind_addr) {
> - free(Run.bind_addr);
> - Run.bind_addr= NULL;
> - }
> -
> -}
> -
> -
> /*
> * Create a new process object and add any current objects to the
> * process list.
> @@ -1011,21 +986,6 @@
> }
>
>
> -/*
> - * Reset and release the Run mail-format sub-structure
> - */
> -static void reset_runmail() {
> -
> - free(Run.MailFormat.from);
> - Run.MailFormat.from= NULL;
> - free(Run.MailFormat.subject);
> - Run.MailFormat.subject= NULL;
> - free(Run.MailFormat.message);
> - Run.MailFormat.message= NULL;
> -
> -}
> -
> -
> /* ---------------------------------------------------------------- Checkers
> */
>
>
> diff -Naur monit/util.c monit-devel/util.c
> --- monit/util.c 2002-09-16 12:20:38.000000000 +0200
> +++ monit-devel/util.c 2002-09-27 00:38:35.000000000 +0200
> @@ -55,6 +55,8 @@
> static int is_unsafe(unsigned char *c);
> static char *is_str_defined(char *);
> static char *is_str_defined_default(char *);
> +static void initialize();
> +static void reset_runmail();
>
> /**
> * General purpose utility methods.
> @@ -935,6 +937,35 @@
> }
>
>
> +/**
> + * High level function to monit's configuration interface
> + */
> +int parse() {
> +
> + /* Creation of the global process list is synchronized */
> + LOCK(Run.mutex)
> +
> + initialize();
> +
> + if(Run.controlfile)
> + if(!parse_plain(Run.controlfile)) {
> + error("%s: Parsing of configuration file failed\n", prog);
> + return FALSE;
> + }
> +
> + if( TRUE /* this will be replaced by test on variables that will define
> ldap source */ )
> + if(!parse_ldap()) {
> + error("%s: Parsing of LDAP configuration failed\n", prog);
> + return FALSE;
> + }
> +
> + END_LOCK;
> +
> + return TRUE;
> +
> +}
> +
> +
> /* ----------------------------------------------------------------- Private
> */
>
>
> @@ -985,3 +1016,42 @@
>
> }
>
> +
> +/**
> + * Initialize objects. Placeholder for setting values that can change
> + * between cycles (changed configuration) and not easily supported by
> + * the grammar implementation.
> + */
> +static void initialize() {
> +
> + destroy_hosts_allow();
> + reset_runmail();
> +
> + Run.dolog= FALSE;
> + Run.dohttpd= FALSE;
> + Run.Auth.defined= FALSE;
> +
> + if(Run.bind_addr) {
> + free(Run.bind_addr);
> + Run.bind_addr= NULL;
> + }
> +
> +}
> +
> +
> +/*
> + * Reset and release the Run mail-format sub-structure
> + */
> +static void reset_runmail() {
> +
> + free(Run.MailFormat.from);
> + Run.MailFormat.from= NULL;
> +
> + free(Run.MailFormat.subject);
> + Run.MailFormat.subject= NULL;
> +
> + free(Run.MailFormat.message);
> + Run.MailFormat.message= NULL;
> +
> +}
> +
--
Rory Toma address@hidden
VP of Run Level 5 http://www.trs80.net
Digeo Digital http://www.digeo.com
signature.asc
Description: This is a digitally signed message part