mirror of
https://github.com/sheumann/hush.git
synced 2024-12-27 01:32:08 +00:00
Patch from Andrew Flegg:
Here's a pretty crude patch to reload /etc/inittab when init receives a SIGHUP. The mailing list archives weren't entirely clear on whether or not it should already happen, but didn't appear to be. The patch: * Adds a new function, reload_signal() which just calls parse_inittab() and run_actions(RESPAWN) * Before entering the while (1) loop set up SIGHUP to call reload_signal() * Modify new_init_action to skip the action if the same command already exists on the same terminal This last bit means that changing already running entries is a bit hairy as you can end up with, for example, two shells running on the same virtual console. However, for solely adding/removing entries this patch seems to work quite well.
This commit is contained in:
parent
0246222351
commit
6fd0e31e87
21
init/init.c
21
init/init.c
@ -847,7 +847,14 @@ static void new_init_action(int action, char *command, const char *cons)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Append to the end of the list */
|
/* Append to the end of the list */
|
||||||
for (a = init_action_list; a && a->next; a = a->next);
|
for (a = init_action_list; a && a->next; a = a->next) {
|
||||||
|
/* don't enter action if it's already in the list */
|
||||||
|
if ((strcmp(a->command, command) == 0) &&
|
||||||
|
(strcmp(a->terminal, cons) ==0)) {
|
||||||
|
free(new_action);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (a) {
|
if (a) {
|
||||||
a->next = new_action;
|
a->next = new_action;
|
||||||
} else {
|
} else {
|
||||||
@ -1022,7 +1029,14 @@ static void parse_inittab(void)
|
|||||||
#endif /* CONFIG_FEATURE_USE_INITTAB */
|
#endif /* CONFIG_FEATURE_USE_INITTAB */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void reload_signal(int sig)
|
||||||
|
{
|
||||||
|
message(LOG, "Reloading /etc/inittab");
|
||||||
|
parse_inittab();
|
||||||
|
run_actions(RESPAWN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
extern int init_main(int argc, char **argv)
|
extern int init_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct init_action *a;
|
struct init_action *a;
|
||||||
@ -1120,6 +1134,9 @@ extern int init_main(int argc, char **argv)
|
|||||||
loop_forever();
|
loop_forever();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Redefine SIGHUP to reread /etc/inittab */
|
||||||
|
signal(SIGHUP, reload_signal);
|
||||||
|
|
||||||
/* Now run the looping stuff for the rest of forever */
|
/* Now run the looping stuff for the rest of forever */
|
||||||
while (1) {
|
while (1) {
|
||||||
/* run the respawn stuff */
|
/* run the respawn stuff */
|
||||||
|
Loading…
Reference in New Issue
Block a user