diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2016-01-21 08:31:31 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2016-01-21 08:31:31 +0200 |
commit | 0c930fc6d3fde82e800c685ec1df92ddfa23fe09 (patch) | |
tree | 1494ff68c9006d3e1a9d6ab5b3b2a5e2f66a47ca /src/pies.h | |
parent | 2040ea870ae411472a73d0bee49fb7c4a774ad93 (diff) | |
download | pies-0c930fc6d3fde82e800c685ec1df92ddfa23fe09.tar.gz pies-0c930fc6d3fde82e800c685ec1df92ddfa23fe09.tar.bz2 |
Cleanup: redo configuration file handling and dependency tracking.
Implement clean configuration reload on SIGHUP.
Use SIGUSR1 to restart the program (previously initiated by SIGHUP).
* src/Makefile.am (pies_SOURCES): Add comp.c
* src/comp.c: New file.
* src/acl.c (pies_acl_free): Don't coredump on NULL arg.
(_parse_from): Set cmp function for the sockaddr list.
(_acl_common_section_parser): Set cmp function for the ACL
(pies_acl_cmp): New function.
* src/acl.h (pies_acl_cmp): New proto.
* src/cmdline.opt: Remove option --dump-prereq. Add options
--trace-prereq and --trace-depend.
* src/ctl.c: Use prog_tag to access tag of struct prog.
* src/depmap.c (depmap_clear)
(depmap_clear_all): New functions.
* src/inetd.c (inetd_conf_file): Don't register prog right
away. This is done later in component_config_commit.
(inetd_parse_conf): Rename to inetd_config_parse.
* src/limits.c (limits_cmp): New function.
* src/pies.c (config_file): Replace with struct config_syntax.
(str_to_config_syntax): Return a pointer to struct config_syntax.
(add_config): Rename to config_file_add.
(config_file_add_type): New function.
(return_code_keywords, create_action): Change handling of actions.
(return_code_section_parser): Likewise.
(component_verify, component_create)
(component_free, component_finish): Move to comp.c
(config_parse): Remove.
(pies_config_parse): New function.
(pies_read_config,pies_reload): New function.
(pies_reload): Rename to request_reload.
(pies_status): Rename to request_status.
(pies_stop): Rename to request_stop.
(main): Change configuration file handling.
SIGHUP reloads configuration, instead of restarting the program.
(default_sigv,sig_handler): Handle SIGUSR1.
* src/pies.h (component): New members: prev, next, listidx, arridx,
ref_count, prog.
Remove act_head, act_tail, act_temp.
Add new prototypes.
* src/prog.h (prog): Remove tag and prereq.
* src/progman.c (prog_tag): New function.
(destroy_prog): Update component reference count.
(register_redir): Likewise.
(register_prog0): Take one argument.
Update component reference count.
(register_prog): Update comp->prog
(prog_rebuild_prerequisites): Remove.
(component_fixup_depend): Remove.
(fixup_prerequisites,rebuild_prerequisites)
(print_dep,progman_dump_prereq)
(progman_dump_depmap,progman_build_depmap): Remove.
(prog_start_prerequisites): Scan depmap to find prerequisites.
(prog_stop_dependents): Likewise.
(progman_wait): Remove.
(progman_wait_until): New function.
(progman_stop): Rewrite using progman_wait_until.
(react): Rewrite using grecs_list
* src/sysvinit.c: Use prog_tag when needed.
* src/userprivs.c (pies_privs_cmp, pies_privs_free): New functions.
* grecs: Update.
* lib/safe_strcmp.c: New file.
* lib/Makefile.am: Add safe_strcmp.c
* lib/libpies.h (safe_strcmp): New proto.
Diffstat (limited to 'src/pies.h')
-rw-r--r-- | src/pies.h | 57 |
1 files changed, 46 insertions, 11 deletions
@@ -100,3 +100,2 @@ struct action { - struct action *next; size_t nstat; @@ -204,4 +203,12 @@ enum pies_comp_mode +struct prog; + struct component { + struct component *prev, *next; /* Components form doubly-linked list. */ + int listidx; /* Index of the list. */ + size_t arridx; /* Index of this component. */ + size_t ref_count; /* Reference count. */ + struct prog *prog; /* Prog associated with this component. */ + enum pies_comp_mode mode; @@ -219,3 +226,3 @@ struct component char *rmfile; /* Try to remove this file before starting */ - struct pies_privs privs; /* UID/GIDS+groups to run under */ + struct pies_privs privs; /* UID/GIDS+groups to run as */ mode_t umask; /* Umask to install before starting */ @@ -251,4 +258,3 @@ struct component /* Actions to execute on various exit codes: */ - struct action *act_head, *act_tail; - struct action act_temp; /* Auxiliary object used during configuration */ + struct grecs_list *act_list; /* ACLs for control interface */ @@ -264,2 +270,3 @@ enum pies_action { ACTION_RESTART, + ACTION_RELOAD, ACTION_CTRLALTDEL, @@ -291,3 +298,3 @@ extern char *default_control_url[2]; -enum config_syntax +enum config_syntax_type { @@ -299,4 +306,7 @@ enum config_syntax -int str_to_config_syntax (const char *str, enum config_syntax *psynt); -void add_config (enum config_syntax syntax, const char *name); +struct config_syntax; + +struct config_syntax *str_to_config_syntax (const char *str); +void config_file_add (struct config_syntax *syntax, const char *name); +void config_file_add_type (enum config_syntax_type syntax, const char *name); @@ -305,2 +315,3 @@ void free_redirector (struct redirector *rp); void pies_schedule_action (int act); +void free_action (struct action *act); @@ -315,7 +326,6 @@ void progman_filter (int (*filter) (struct component *, void *data), void *data); +int progman_wait_until (int (*cond) (void *), void *data); void progman_stop_tag (const char *name); -void progman_dump_prereq (void); -void progman_dump_depmap (void); int progman_accept (int socket, void *data); -int progman_build_depmap (void); + void progman_create_sockets (void); @@ -353,2 +363,7 @@ void depmap_set (pies_depmap_t dmap, size_t row, size_t col); int depmap_isset (pies_depmap_t dmap, size_t row, size_t col); +void depmap_clear (pies_depmap_t dmap, size_t row, size_t col); + +void depmap_clear_all (pies_depmap_t dmap, enum pies_depmap_direction dir, + size_t coord); + void depmap_tc (pies_depmap_t dmap); @@ -367,2 +382,10 @@ struct component *component_create (const char *name); void component_free (struct component *comp); +void component_ref_incr (struct component *comp); +void component_ref_decr (struct component *comp); + +void component_config_begin (void); +void component_config_rollback (void); +void component_config_commit (void); + +int component_is_active (struct component *comp); @@ -371,2 +394,9 @@ struct grecs_keyword *find_component_keyword (const char *ident); +void components_dump_depmap (void); +void components_trace (char **argv, enum pies_depmap_direction dir); + +struct component *component_depmap_first (enum pies_depmap_direction dir, + size_t idx, pies_depmap_pos_t *ppos); +struct component *component_depmap_next (pies_depmap_pos_t pos); + @@ -403,2 +433,3 @@ int set_limits (const char *name, limits_record_t lrec); void free_limits (limits_record_t rec); +int limits_cmp (limits_record_t a, limits_record_t b); @@ -453,5 +484,9 @@ void pies_priv_setup (struct pies_privs *); void pies_epriv_setup (struct pies_privs *); + +int pies_privs_cmp (struct pies_privs const *a, struct pies_privs const *b); +void pies_privs_free (struct pies_privs *p); + /* inetd.c */ -int inetd_parse_conf (const char *file); +int inetd_config_parse (const char *file); |