Age | Commit message (Collapse) | Author | Files |
|
|
|
* doc/pies.texi: Document changes.
* src/inetd.c (listel_dispose): Remove static qualifier.
* src/pies.h (status_cond): New struct.
(action): Replace nstat, status with cond_list.
(listel_dispose): New prototype.
* src/pies.c (action_free): Free cond_list.
(create_action): Rewrite.
* src/progman.c (status_matches_p): Rewrite.
|
|
|
|
* NEWS: Document changes.
* doc/pies.texi: Document changes.
* src/cmdline.opt: New option --list-shutdown-sequence
* src/comp.c (compute_shutdown_sequence)
(component_shutdown_list,components_list_shutdown_sequence)
(components_shutdown_sequence_numbers): New functions.
(component_config_commit): Compute shutdown sequences for
each component.
* src/pies.c: Handle the --list-shutdown-sequence option.
* src/pies.h (component) <shutdown_seqno>: New field.
(components_list_shutdown_sequence)
(components_shutdown_sequence_numbers): New prototypes.
* src/progman.c (progman_gc): Rewrite.
(progman_stop): Rewrite.
* tests/shdnseq.at: New test.
* tests/sigwait.c: Take options -n and -f FILE.
Open file in append mode. Lock it before writing.
* tests/Makefile.am: Add new test.
* tests/testsuite.at: Include new test.
|
|
* NEWS: Document changes.
* doc/pies.texi: Document changes.
* src/comp.c (component_create): Initialize sigterm field.
* src/pies.h (component): New field: sigterm.
* src/pies.c (strtosignum): New function.
(create_action): Use strtosignum.
(_cb_signal): New callback.
(component_keywords): New keyword "sigterm".
* src/progman.c (prog_sigterm): New function.
(link_prog, progman_cleanup)
(progman_stop_component): Use prog_sigterm.
(print_status): Change semantics of expect_term: it means termination
signal, if not 0.
* tests/sigterm.at: New test.
* tests/sigwait.c: New test program.
* tests/Makefile.am: Add new test.
(noinst_PROGRAMS): Add sigwait.
* tests/testsuite.at: Include new test.
|
|
|
|
|
|
* NEWS: Update.
* doc/pies.texi: Update.
* src/pies.h (component): Remove the facility field.
* src/comp.c: Likewise.
* configure.ac: Select interface to use to close fds (imported from
mailutils).
* lib/closefds.c: New file (imported from mailutils).
* lib/Makefile.am: Add closefds.c
* lib/libpies.h (pies_close_fds): New proto.
* src/pies.c: Use pies_close_fds
* src/progman.c: Likewise.
|
|
Instead of spawning a subprocess for each redirection, read the
output directly from pipe and send it to syslog using an asynchronous
syslog implementation.
* src/syslog.c: New file.
* src/pies_syslog.h: New file.
* src/Makefile.am: Add syslog.c and pies_syslog.h
* src/comp.c (component_create): Use pies_log_facility.
* src/ctl.c (auth_prog)
(prog_serialize): Remove TYPE_REDIRECTOR case
* src/diag.c (syslog_printer): Use pies_vsyslog.
(syslog_open): Use pies_syslog_open.
(syslog_close): Use pies_syslog_close.
(diag_setup): Use pies_syslog_open.
* src/pies.c (log_facility, log_tag): Remove globals. Use
pies_log_facility and pies_log_tag instead.
New configuration statement syslog.dev
* src/pies.h: Include pies_syslog.h
(register_socket,register_program_socket): Additional argument: free_data.
* src/prog.h (TYPE_REDIRECTOR): Remove.
(prog.v.p.redir): Change data type.
(prog.v.r): Remove.
* src/progman.c (prog_tag)
(destroy_prog)
(progman_cleanup): Remove TYPE_REDIRECTOR case
(prog_stop_redirectors): Deregister fds
(redir_tag,register_redir)
(update_redir): Remove.
(open_redirector): Rewrite. Set up direct reader from the stream,
instead of spawning a subprocess.
(prog_start): Change open_redirector actual arguments.
* src/socket.c (sockinst): New member: free_data.
(register_socket): Initialize the free_data member.
(register_program_socket): Likewise.
|
|
* doc/pies.texi: Improve documentation of variable expansion
and the use of pies in docker entry points.
* src/pies.h (vlogmsg): New proto.
* src/progman.c (prog_start_prologue): Set ws_error member to
ensure errors from ${X:?WORD} construct are properly reported.
|
|
* NEWS: Update.
* doc/pies.texi: Document the expandenv flag.
* src/comp.c (component_finish): Warn if both "shell" and "expandenv"
are used together.
Expand command to argc/argv only unless the CF_EXPANDENV flag is given.
* src/pies.c (str_to_cf): New flag: expandenv
* src/pies.h (CF_EXPANDENV): New define.
* src/prog.h (struct prog): New member: argv.
* src/progman.c (destroy_prog): Free argv.
(prog_start_prologue): Expand the command line taking into account
the current environment if CF_EXPANDENV flag is given. Otherwise,
copy the component argv to the prog.
(prog_execute): Use prog->v.p.argv
* tests/Makefile.am: Add expandenv.at
* tests/testsuite.at: Likewise.
* tests/expandenv.at: New file.
|
|
Use modified Floyd-Warshall algorithm for cyclic dependecy detection.
The computed next vertex indices are used when reporting the cycles
found.
This fixes dead loops that occurred in earlier versions when trying to
report cycles. One of inputs that caused such behavior is used as a
new test in cyclic.at.
* src/depmap.c: Rewrite using modified Floyd-Warshall algorithm.
(depmap_cycle_detect,depmap_path_free): New functions.
* src/comp.c (report_cyclic_dependency): Take struct depmap_path *
as argument.
(component_build_depmap): Use depmap_cycle_detect to detect cyclic
dependencies.
(depmap_dump): Special handling for zero-sized depmap.
* tests/cyclic.at: Add new test.
* src/pies.h (depmap_dim, depmap_free)
(depmap_cycle_detect,depmap_path_free): New protos.
* NEWS: Document changes.
|
|
|
|
* configure.ac: New option --enable-sysvinit. Disable the init
code if RUN_LVL is not available.
(PIES_SYSVINIT_ENABLED): New configuration define.
(PIES_COND_SYSVINIT): New condition
Print configuration settings summary.
* src/pies.h (is_sysvinit): Check for PIES_SYSVINIT_ENABLED.
(SYSVINIT_ACTIVE): New macro.
* grecs: Upgrade.
* src/Makefile.am: Conditionally link sysvinit-related code.
* src/cmdline.opt: Disable the --telinit option if sysvinit support
is not available.
(parse_options): Use SYSVINIT_ACTIVE in the conditional.
* src/comp.c (component_verify): Check if component definition is
allowed by the current state of the sysvinit support.
* src/ctl.c: Disable the /runlevel entry point if sysvinit support
is not compiled.
* src/diag.c (stderr_open): Make sure sysvinit-related code is not
compiled if the sysvinit support is not available.
* src/pies.c (config_syntax_tab): Add entry for CONF_INITTAB only if
sysvinit support is available.
(_cb_initdefault,_cb_runlevels): Remove. Use cb_initdefault and cb_runlevels
instead.
(component_keywords): Disable runlevels without sysvinit support.
(pies_keywords): Same for initdefault.
Use SYSVINIT_ACTIVE to suppress compilation of sysvinit code without
sysvinit support.
* src/progman.c: Use SYSVINIT_ACTIVE to suppress compilation of
sysvinit code without sysvinit support.
* src/sysvinit.c (cb_initdefault,cb_runlevels): New functions.
|
|
The "env" statement is now a compound statement. It can contain four
substatements: "clear" to clear the environment, "keep" to retain
certain variable while clearing it, "set" to set a variable, and
"unset" to unset a variable or variables.
Both "keep" and "unset" can take globbing pattern as their argument,
in which case they affect all variable matching that pattern.
The value part in the "set" statement is subject to variable expansion,
e.g.
set "MANPATH=$MANPATH${MANPATH:+:}/usr/local/man"
The support for the old one-line syntax of "env" is retained for
backward compatibility.
This commit also fixes redirection to a file: new data are appended
to the file, instead of overwriting it.
* lib/Makefile.am: Add new files.
* lib/envop.c: New file.
* lib/envop.h: New file.
* lib/wildmatch.c: New file.
* src/comp.c (component_free): Update.
* src/pies.c (argv_free): New function.
(parse_legacy_env): New function.
(_cb_env): Remove.
(cb_env_section_parser): New function.
(cb_env_keywords): New keywords for the "env" block statement:
clear, keep, set, unset.
(component_keywords): New compount statement: env.
Old usage retained for backward compatibility.
* src/pies.h: Include "envop.h"
(component)<env>: Remove.
<envop>: New field.
* src/prog.h (prog)<env>: New field.
* src/progman.c (redirect_to_file): Position to the end of file.
(DEBUG_ENVIRON): Remove macro.
(debug_environ): New function.
(environ_setup): Remove.
(prog_sockenv): Use environ_set to modify local copy of environment.
(prog_start_prologue): Use environ_create + envop_exec to create and
modify the environment.
(prog_execute): Set environment to prog-local copy.
* tests/.gitignore: Build envtest
* tests/Makefile.am: Add new tests.
* tests/testsuite.at: Add environment tests.
* tests/envop.at: New file.
* tests/envtest.c: New file.
* tests/env.at: New file.
* tests/redirect.at: Check first two lines of the output file.
|
|
The new flag "shell" instructs pies to run the command marked with it
as '/bin/sh -c $command'. Alternative shell can be supplied ising the
'program' statement.
This is useful if the command line uses shell-specific features (command
or variable expansion, redirection, pipes, etc.)
This commit also fixes a bug in the 'env' statement handling: a single
argument with embedded whitespaces was undergoing word splitting and
thus incorrectly handled as multiple arguments.
* NEWS: Document changes.
* doc/pies.texi: Likewise.
* src/comp.c (component_free): Free command.
(component_finish): Split command into argv/argc as directed by the
CF_SHELL flag.
* src/pies.c (_cb_command): Remove. Functionality moved to
component_finish().
(_cb_env): Bugfix. Don't split arguments.
* src/pies.h (CF_SHELL): New flag.
(component) <command>: New member.
* tests/Makefile.am: Add new tests.
* tests/testsuite.at: Add new tests.
* tests/aux/respawn: Change default timeout to 1 second.
* tests/respawn.at: Minor change.
* tests/shell.at: New test.
|
|
* src/pies.h: Update comment.
* src/progman.c (register_prog0): Register shutdown components
in disabled state.
(program_shutdown): New function.
(progman_stop): Call program_shutdown.
* tests/shutdown.at: New test.
* tests/Makefile.am: Add new test.
* tests/testsuite.at: Likewise.
* tests/aux/startup: Rename to tests/aux/touchfile
* tests/startup.at: Reflect the change.
|
|
These are components that are run at program startup. Starting
other components is delayed until all startup components terminate.
This is similar to SysV "bootwait" components.
Upon termination, startup components are removed from the configuration.
They are not renewed upon configuratuion reload.
* src/comp.c (comp_array_remove): Remove from the depmap as well.
(component_ref_decr): Use comp_array_remove for active components
and plain component_free for inactive ones.
(component_build_depmap): Use comp_array_remove.
(component_config_commit): Special handling for pies_comp_startup
components.
* src/pies.c (modetab): New component modes: "startup" and "shutdown".
(main): Run program_init_startup.
* src/pies.h (pies_comp_mode): New modes: pies_comp_startup and
pies_comp_shutdown.
(program_init_startup): New proto.
* src/progman.c (progman_waiting_p): Return 1 if a startup component
is still running.
(program_init_startup): New function.
(progman_cleanup): Handle pies_comp_startup termination.
* src/socket.c (switch_eids): Avoid unnecessary calls to setegid
and seteuid.
* tests/atlocal.in (auxdir): New variable.
* tests/mailer: Move to tests/aux/
* tests/respawn: Move to tests/aux/
* tests/retcode: Move to tests/aux/
* tests/aux/startup: New auxiliary program.
* tests/redirect.at: Start components from $auxdir.
* tests/respawn.at: Likewise.
* tests/ret-exec.at: Likewise.
* tests/ret-notify.at: Likewise.
* tests/startup.at: New file.
* tests/testsuite.at: Include startup.at
* tests/Makefile.am: Add new tests.
|
|
|
|
* src/comp.c (component_log_dep): Remove.
(report_cyclic_dependency): New function.
(comp_array_remove): New function.
(component_build_depmap): Remove erroneous components both from
the component table and dependency map.
(components_dump_depmap): Avoid trailing whitespace in the output.
* src/depmap.c (depmap_clear_all): Remove.
(depmap_remove): New function.
* src/pies.h (CF_REMOVE): New flag.
(depmap_clear_all): Remove prototype.
(depmap_remove): New prototype.
* tests/Makefile.am: Add new test.
* tests/atlocal.in (trimws): New function.
* tests/cyclic.at: New test.
* tests/testsuite.at: Include new test.
|
|
|
|
* grecs: Upgrade.
* src/pies.h: Fix include paths.
* src/piesctl.c: Likewise.
* NEWS: Document changes.
* doc/pies.texi: Likewise.
|
|
pies -T is now fully compatible with the legacy telinit command
* src/telinit.opt: New file.
* src/Makefile.am: Add telinit.opt
* src/cmdline.opt (-T): Remove explicit variable. Rest of
command line is processed specially.
* src/pies.h (telinit): Change prototype.
* src/sysvinit.c (telinit): Rewrite.
* src/.gitignore: Update.
* doc/pies.texi: Document telinit.
|
|
State transition algorithm used this far could cause spurious component
wakeups in some cases. Consider the following scenario: being in
runlevel N, the configuration is changed so that a component X is added
at runlevel N. Then a change to runlevel N+1 is initiated. What happens
then is that X is woken up (still being in runlevel N) and terminated
shortly afterwards, upon entering runlevel N+1.
To avoid this, configuration must be reloaded after runlevel changes.
* src/ctl.c (res_runlevel): Don't initiate ACTION_RELOAD after
setting the runlevel.
* src/pies.c (main): Begin main event loop with call
to pies_pause.
* src/pies.h (pies_set_hook): New proto.
(inittrans): Remove proto.
* src/socket.c (pies_set_hook): New function.
(pies_pause): Call pies_pause_hook if defined.
* src/sysvinit.c (inittrans): Change to static.
If transition was initiated by user (e.g. by invoking telinit),
schedule ACTION_RELOAD.
(sysvinit_begin): Set inittrans as pies_hook
|
|
* src/ctl.c: New endpoint "environ"
* src/pies.h (sysvinit_envlocate)
(sysvinit_envdelete)
(sysvinit_envupdate): New protos.
* src/piesctl.c: New subcommand "telinit environ".
* src/sysvinit.c (sysvinit_envlocate)
(sysvinit_envdelete)
(sysvinit_envupdate): New functions.
(sysvinit_begin): Create allocated copies of
instance and pies_master_argv to avoid them being
rewritten by calls to mf_proctitle_format
|
|
|
|
* lib/addrfmt.c: Include limits.h
* src/ctl.c (fun_stop,fun_start): Ignore non-component
progs.
* src/pies.c (request_restart_components): Fix piesctl
invocation.
* src/pies.h (PIES_CHLD_RESCHEDULE_ALARM): New flag.
(progman_wait_until): Remove.
(progman_recompute_alarm): New proto.
* src/progman.c (recompute_alarm): Remove. All uses
raise PIES_CHLD_RESCHEDULE_ALARM instead.
(progman_wake_sleeping): Handle status_stopping components
independently on their activity flag.
(prog_stop_all, progman_wait_until): Remove.
(progman_stop): Rewrite using mark+sweep approach.
|
|
* po/POTFILES.in: Add missing source files.
* grecs: Upgrade.
* src/diag.c (pies_diag_printer): New function.
(logfuncall): New function.
* src/pies.h: Add new prototypes.
* src/pies.c (main): Initialize grecs_print_diag_fun
* src/acl.c: Uniformly use double-quotes in messages. Use
logfuncall where applicable.
* src/comp.c: Likewise.
* src/ctl.c: Likewise.
* src/inetd-bi.c: Likewise.
* src/inetd.c: Likewise.
* src/limits.c: Likewise.
* src/piesctl.c: Likewise.
* src/progman.c: Likewise.
* src/socket.c: Likewise.
* src/sysvinit.c: Likewise.
|
|
* src/inetd-bi.c (tcpmux): Use component_foreach to
handle help requests.
* src/progman.c (progman_iterate_comp): Removed.
* src/pies.h: Likewise.
|
|
This complements 6aac230c. The entry is created unless
a component for runlevel S already exists.
* src/comp.c (component_foreach): New function.
* src/pies.h: Likewise.
* src/sysvinit.c (inittab_parse): Provide default S
entry unless one is already defined.
|
|
* src/sysvinit.c (inittab_parse): Provide default entry if
inittab cannot be read or if it defined no components.
* src/comp.c (component_list_is_empty): New function.
* src/pies.c (pies_read_config): Always return 0 in init mode.
(main): Use LOG_DAEMON in init mode.
* src/pies.h (component_list_is_empty): New proto.
|
|
This commit implements the following operations on the new /conf endpoints:
GET /conf/runtime - List configuration
PUT /conf/runtime - Reload configuration
POST /conf/runtime - Post new configuration
GET /conf/files - List configuration files
DELETE /conf/files - Delete some or all configuration files
from the list
POST /conf/files - Install new configuration file
Piesctl supports the following new commands:
piesctl config reload
piesctl config file clear
piesctl config file add SYNTAX NAME
piesctl config file del[ete] NAME [NAME...]
piesctl config file list
* src/ctl.c (res_conf): New function.
(restab): New endpoint /conf
* src/pies.c (config_file_add): Set free_entry.
(config_file_remove, config_file_remove_all)
(config_file_list_serialize): New functions.
(pies_config_parse): Bail out if tree processing fails.
(pies_reload): Remove unused function.
(main): Redo ACTION_RELOAD handling.
Handle ACTION_COMMIT.
* src/pies.h (ACTION_COMMIT): New action.
(config_file_remove, config_file_remove_all)
(config_file_list_serialize)
(pies_read_config, progman_gc): New protos.
* src/piesctl.c (cmdline_parser_state): New struct
(next_token, peek_token): Take ptr to cmdline_parser_state as argument.
(parse_error, require_token, assert_eol)
(piesctl_format): New functions.
(parse_condition_to_uri): Rewrite using piesctl_format.
New subcommand: config.
Improve help output.
|
|
* src/pies.h (PIES_CHLD_GC): New op.
(progman_stop_tag): Remove proto.
* src/pies.c (main): Handle PIES_CHLD_GC: stop all programs marked
for termination.
* src/comp.c (component_config_commit): Mark leftover components
for termination, instead of waiting for them to terminate.
* src/sysvinit.c (runlevel_setup_prog): Skip prog if its
active status didn't change.
Mark inactivated progs for termination.
(sysvinit_runlevel_setup): Schedule PIES_CHLD_GC.
(inittrans): Don't wait for programs to terminate. That will be done
in the main loop.
* src/prog.h (prog)<stop>: New boolean member.
* src/progman.c (progman_cleanup)
(progman_stop_component): Clear the stop flag.
(progman_gc): New function.
(progman_stop_tag): Remove.
|
|
* src/diag.c: Rewrite.
(vdiagmsg,diagmsg): New functions.
* src/pies.c (main): Set DIAG_REOPEN_LOG for init process.
* src/pies.h (DIAG_REOPEN_LOG): New flag
(DIAG_TO_MASK,DIAG_ALL): New constants.
(diagmsg): New proto.
* src/sysvinit.c: Add log messages in important transition points
(inittrans): Reinitialize logging to syslog upon transition to
normal mode.
|
|
* src/pies.c (main): Move init-specific command line
handling to sysvinit_parse_argv.
* src/pies.h (dfl_level): Remove extern.
(sysvinit_parse_argv): New proto.
* src/sysvinit.c (sysvinit_parse_argv): New function.
(sysvinit_begin): Start emergency shell, if requested.
|
|
* src/pies.h (PIES_COMP_WAIT): Remove.
(PIES_COMP_MASK): Save one bit.
(PIES_CHLD_NONE, PIES_CHLD_CLEANUP)
(PIES_CHLD_WAKEUP): New constants.
(pies_schedule_children): New proto.
(sysvinit_runlevel_setup): Change signature.
* src/pies.c (children_cleanup, got_alarm): Merge into
single static variable children_op. All uses updated.
(pies_schedule_children): New function.
(sig_handler): Update
(main): Don't call ctl_open for init process. It is done
by inittrans after transition from boot to normal state.
Update to use pies_schedule_children.
* src/prog.h (IS_ACTIVE_COMPONENT): New macro.
* src/progman.c (prog_start): Don't modify prog->v.p.wait.
(progman_wake_sleeping): Start usual components only after
all "wait" components have terminated.
(progman_cleanup): If a "wait" component has terminated,
request PIES_CHLD_WAKEUP.
* src/sysvinit.c (enstate) <wait>: Remove.
(enablecomp): Update.
(runlevel_setup_prog): Set prog->v.p.wait.
(sysvinit_runlevel_setup): Take only one parameter.
(inittrans): Remove "wait" and the related mess.
Call ctl_open after transition boot -> normal.
|
|
* src/prog.h (status_enabled, status_disabled): Remove.
(status_stopped, status_running): New modes.
All uses updated.
* src/comp.c (component_finish): Disable ondemand component
by default.
* src/ctl.c (json_object_set_bool): New function.
(pies_status_str): Update.
(prog_serialize): Set "disabled" attribute.
(fun_stop, fun_start): Use CF_DISABLED flag.
(res_runlevel): Schedule ACTION_RELOAD.
* src/pies.h (json_object_set_bool): New proto.
* src/piesctl.c (status_trans): Reflect changes in modes.
(print_comp): Check the "disabled" attribute.
* src/progman.c (register_prog0)
(prog_open_socket,prog_start,prog_stop)
(progman_wake_sleeping)
(prog_start_prerequisites)
(react, progman_cleanup)
(progman_stop_component): Update.
(no_children_left): Fix.
* src/sysvinit.c (enablecomp): Make CF_DISABLED flag
persist for ondemand components.
(runlevel_setup_prog): Use CF_DISABLED flag.
(inittrans): Stop inactivated processes.
* doc/pies.texi: Update.
|
|
* src/pies.h: Include json.h
(sysvinit_report, sysvinit_set_runlevel)
(json_object_set_string, json_object_set_number): New protos.
* src/ctl.c (ctlio_resource)<predicate>: New member.
(restab): New endpoint: runlevel. Available only if run
as pid 1.
(find_resource): If predicate is not NULL, call it to
confirm that the endpoint is available.
* src/piesctl.c: New subcommand "telinit".
* src/sysvinit.c (sysvinit_set_runlevel): New function.
(sysvinit_fifo_handler): Implement on-demaind components.
|
|
* src/progman.c (progman_foreach): Allow filter to remove its prog
argument from the list. Return integer (result of the call
to filter, that returned non-zero). All uses changed.
(progman_running_count): Remove.
(progman_stop_component): Take a pointer to
pointer. Pass it to destroy_prog when needed. All uses changed.
* src/comp.c (prog_is_leftover): New function.
(cb_terminate_prog): Use prog_is_leftover. Don't raise CF_DISABLED
flag, as prog will have been destroyed by progman_stop_component.
(cb_kill_prog): Use prog_is_leftover.
* src/ctl.c (fun_stop): Check if prog still exists after the
call to progman_stop_component.
* src/pies.h (progman_running_count): Removed.
* src/prog.h (progman_foreach): Return int.
(progman_stop_component): Change signature.
|
|
* src/ctl.c (prog_serialize): List runlevels.
* src/pies.c (main): Set got_alarm after reloading configuration.
Handle ACTION_POWER.
* src/pies.h (ACTION_POWER): New constant.
(progman_running_p): Rename to progman_waiting_p. All uses changed.
(sysvinit_power): New proto.
(POWER_STAT_FILE): New define.
(POWER_STAT_FAIL,POWER_STAT_LOW,POWER_STAT_OK): New constants.
* src/prog.h (prog) <idx>: Remove.
(prog) <wait>: New member.
* src/progman.c (prog_lookup_by_idx): Remove.
(progman_waiting_p): Return 1 only if there is at least one
prog with v.p.wait set.
(prog_start): Initialize v.p.wait for sysvinit components.
(progman_start): Don't do anything if waiting for components from
the previous runlevel.
(progman_wake_sleeping): Likewise.
(progman_cleanup): Assume expect_term if waiting for components from
the previous runlevel.
Clear v.p.wait on exited progs.
* src/sysvinit.c (sysvinit_fifo_handler): Don't call progman_stop
when handling runlevel changes.
Handle INIT_CMD_POWERFAIL, INIT_CMD_POWERFAILNOW, and
INIT_CMD_POWEROK.
(sysvinit_sigtrans): Handle SIGPWR.
(is_comp_wait): Rewrite.
(power_stat_file): New variable.
(sysvinit_power): New function.
|
|
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.
|
|
* gnulib.modules: Remove unneded modules.
* ident/ident.h: Remove xalloc.h, include errno.h
* ident/ident.c: Use standard allocation functions instead of x*
* ident/pam.c: Remove.
* ident/provider.c: Remove.
* ident/system.c: Remove.
* src/meta.c: Remove.
* src/Makefile.am: Remove meta.c
* src/progman.c: Use grecs_* allocation functions instead of x*.
(notify): Use wordsplit to expand variables within message.
Rename variables: program-name to program_name;
canonical-program-name to canonical_program_name.
* doc/pies.texi: Update.
* src/depmap.c: Use grecs_* allocation functions instead of x*.
(depmap_end): New function.
* src/diag.c (logmsg_vprintf): Use grecs_txtacc instead of obstack.
* src/pies.h (depmap_end): New proto.
Remove unused includes.
* src/acl.c: Use grecs_* allocation functions instead of x*.
* src/ctl.c: Likewise.
* src/inetd.c: Likewise.
* src/limits.c: Likewise.
* src/meta1gram.y: Likewise.
* src/meta1lex.l: Likewise.
* src/pies.c: Likewise.
* src/socket.c: Likewise.
* src/sysvinit.c: Likewise.
* src/userprivs.c: Likewise.
|
|
* configure.ac (DEFAULT_CONTROL_URL): Rename to
DEFAULT_PIES_CONTROL_URL. Change default value.
(DEFAULT_INIT_CONTROL_URL): New subst variable.
* lib/libpies.h (pies_basic_url_create): New prototype.
* lib/url.c (pies_basic_url_create): New function (renamed
from pies_url_create).
(pies_url_create): Expand variable references in the input string.
* src/Makefile.am (AM_CPPFLAGS): Pass DEFAULT_INIT_CONTROL_URL
* src/ctl.c (pies_control_url)
(ctl_open): Don't exit on errors, return -1 instead.
* src/pies.c (default_control_url): New variable.
(config_parse): Create default socket url.
(pies_control_url): New macro
(main): Set environment variable PIES_INSTANCE.
Try to open control socket in init process mode as well.
* src/pies.h (default_control_url): New extern.
(ctl_open): Change prototype.
(pies_control_url): Remove.
* src/piesctl-cl.opt (parse_options): Set environment variable
PIES_INSTANCE.
* src/piesctl.c (parse_config): Use pies_url_create and
DEFAULT_PIES_CONTROL_URL when falling back to the default socket.
|
|
* ctl.c (res_instance): Include "argv" in the return json.
Use pies_master_argv[0] to report binary path.
* pies.c (pies_master_argv,pies_master_argc): New globals.
(main): Initialize them.
Refuse to restart unless argv[0] begins with a slash.
* pies.h (pies_master_argv,pies_master_argc): New globals.
* piesctl.c (com_id): Rewrite output formatting.
|
|
* src/ctl.c (ctlio_authenticate): Configurable realm name.
(ctlio_do_command): Check the Accept header.
* src/inetd.c (inetd_conf_file): Change line_no type.
* src/pies.c (control_keywords): New keyword: realm.
* src/pies.h (control) <realm>: New member.
|
|
* configure.ac: Version 1.2.92
* src/ctl.c (ctlio_finalize_reply): Don't close connection on errors.
* src/pies.h (PIES_PRINTFLIKE): New macro.
(logmsg, logmsg_printf): Mark as printflike.
|
|
Old control options (--status, --restart-components) rewritten using
piesctl.
SIGUSR1 and SIGUSR2 no longer handled.
* lib/arraymember.c (array_index): New function.
* lib/libpies.h: Likewise.
* src/cmdline.opt: Fix copyright years.
* src/piesctl-cl.opt: Likewise.
* src/ctl.c (ctlio_do_command): Implement restart.
(pies_control_url): New function.
(eval_env): rename json to result.
New member cond.
Restore pcond_ functions.
(json_to_pcond): New function.
(res_programs): Conditional selection of programs to list.
Implement restart.
* src/pies.c (ctlfile, statfile): Remove.
(pies_keywords): Mark control-file and stat-file as inactive.
(default_sigv): Remove SIGUSR1 and SIGUSR2
(pies_check_status): Don't send SIGUSR2.
(stop_components): Remove.
(request_restart_components): Rewrite as a wrapper.
Call piesctl to do the job.
(list_components): New function.
* src/pies.h (ACTION_COMPRELOAD)
(ACTION_DUMPSTATS): Remove. All callers changed.
(progman_dump_stats): Remove.
* src/piesctl.c (shttp_request_send): Don't initialize conn->req; the
caller is responsible for that.
(parse_condition, json_to_string)
(parse_condition_to_uri): New functions.
(com_list): Read conditional expression from the command line.
(com_restart): Implement.
* src/progman.c (progman_dump_stats): Remove.
|
|
* configure.ac (DEFAULT_CONTROL_URL): New subst variable.
* grecs: Upgrade.
* ident/pam.c (overwrite_and_free): Free ptr.
* lib/Makefile.am: Add new sources.
* src/addrfmt.c: Move to lib/addrfmt.c
* lib/grecsasrt.c: New file.
* lib/grecsasrt.h: New file.
* lib/mkfilename.c: New file.
* lib/netrc.c: New file.
* lib/pp.c: New file.
* lib/split3.c: New file.
* src/url.c: Move from lib/url.c
(pies_url_free_user, pies_url_free_passwd): New finctions.
* lib/libpies.h (strsplit3): New proto.
(pies_url_create, pies_url_destroy)
(pies_url_get_arg, pies_url_copy)
(pies_url_free_user, pies_url_free_passwd)
(netrc_scan)
(pp_add_option, pp_command_line, mkfilename)
(sockaddr_to_str, sockaddr_to_astr): New protos
* src/Makefile.am (bin_PROGRAMS): New program: piesctl
(pies_SOURCES): Remove addrfmt.c and url.c.
(noinst_HEADERS, BUILT_SOURCES): Add piesctl-cl.h
* src/cmdline.opt: Use pp_* function family to build
preprocessor command line.
* src/ctl.c (http_header_hash): Use case-insensitive hashing.
(ctlio_finalize_reply): Don't close connection after sending 401
response.
(input): Remove ws and wsflags. All uses changed.
(input_append): Use strsplit3 to parse the request line.
* src/pies.c: Use pp_* function family to build
preprocessor command line.
Move assert_, mkfilename and _cb+_url functions into libpies.
* src/pies.h (pies_sockaddr_storage): Move to libpies.h
* src/piesctl.c: New file.
* src/piesctl-cl.opt: New file.
|
|
* src/ctl.c (ctl_open): Add missing return.
* src/pies.c (config_parse): Return if tree is null.
(main) [INIT_EMU]: Print more info. Override default init_fifo.
Don't use syslog and control socket if running as init process.
* src/pies.h (init_fifo): New extern.
* src/progman.c (open_redirector): Return -1 if running as init process.
(prog_start): Always initialize redir[].
* src/sysvinit.c (init_fifo): New variable. Use it instead if the
INIT_FIFO macro.
(inittrans): Call create_fifo once, when transiting from boot to
normal state.
|
|
* src/pies.h (component): New members: list_acl and
adm_acl.
(control): Removed id_acl.
New members: adm_acl and usr_acl.
* src/pies.c (component_keywords): New keywords list-acl and
admin-acl. Removed identity-acl.
* ident/ident.c (pies_identity_user_name): New function.
* ident/identity.h (pies_identity_user_name): New proto.
* src/ctl.c (CTL_USER_STATE,CTL_ADMIN_STATE): New states.
(cmdtab): Mark administrative commands as valid in CTL_ADMIN_STATE
(ctlio_create): Assume CTL_ADMIN_STATE in the absense of identity
providers.
(auth_data): New struct.
(cmd_auth): Select appropriate state depending on the user permissions.
(list_matches): New function.
(eval_env): Keep the list of selected progs.
(count_prog): Removed.
(selector): New function.
(cmd_list): Rewrite to take into account access rights.
(cmd_start,cmd_stop)
(cmd_restart): Only allowed for users with administrative
privileges.
|