[Initscripts-ng-commits] r895 - in /trunk/src/insserv/debian: changelog patches/61_interactive_keyword.patch patches/series run-testsuite
pere at users.alioth.debian.org
pere at users.alioth.debian.org
Thu Jun 25 16:14:37 UTC 2009
Author: pere
Date: Thu Jun 25 16:14:36 2009
New Revision: 895
URL: http://svn.debian.org/wsvn/initscripts-ng/?sc=1&rev=895
Log:
Add new patch introducing a new keyword 'X-Interactive: true' in
the LSB header (Closes: #458224). Add test suite to verify that
it is working.
Added:
trunk/src/insserv/debian/patches/61_interactive_keyword.patch
Modified:
trunk/src/insserv/debian/changelog
trunk/src/insserv/debian/patches/series
trunk/src/insserv/debian/run-testsuite
Modified: trunk/src/insserv/debian/changelog
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/changelog?rev=895&op=diff
==============================================================================
--- trunk/src/insserv/debian/changelog (original)
+++ trunk/src/insserv/debian/changelog Thu Jun 25 16:14:36 2009
@@ -4,6 +4,9 @@
scripts while we wait for a proper fix for bug #458224.
* Fix typo in testsuite function initdir_purge(), making sure the
rc?.d directories are removed during purge.
+ * Add new patch introducing a new keyword 'X-Interactive: true' in
+ the LSB header (Closes: #458224). Add test suite to verify that
+ it is working.
-- Petter Reinholdtsen <pere at debian.org> Tue, 24 Jun 2009 08:19:19 +0200
Added: trunk/src/insserv/debian/patches/61_interactive_keyword.patch
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/patches/61_interactive_keyword.patch?rev=895&op=file
==============================================================================
--- trunk/src/insserv/debian/patches/61_interactive_keyword.patch (added)
+++ trunk/src/insserv/debian/patches/61_interactive_keyword.patch Thu Jun 25 16:14:36 2009
@@ -1,0 +1,132 @@
+Purpose: Add support for a X-Interactive keyword to avoid specifying it in insserv.conf
+Fixes: #458224
+Status: Work in progress.
+---
+
+Index: insserv.8.in
+===================================================================
+--- a/insserv.8.in (revision 885)
++++ b/insserv.8.in (working copy)
+@@ -76,6 +76,7 @@
+ # X-Stop-After: boot_facility_1 [ boot_facility_2 ...]
+ # Default-Start: run_level_1 [ run_level_2 ...]
+ # Default-Stop: run_level_1 [ run_level_2 ...]
++ # X-Interactive: true
+ # Short-Description: single_line_description
+ # Description: multiline_description
+ ### END INIT INFO
+@@ -117,6 +118,11 @@
+ these tags is stopped.
+ @@END_SUSE@@
+ .PP
++The optional X\-Interactive keyword implies that the script using this
++keyword should be started alone in a concurrent boot configuration
++because it interact with the user at the console. Only the value
++'true' is recogniced. All other are ignored.
++.PP
+ The optional
+ .B X\-Start\-Before
+ keyword implies that the script using this keyword
+Index: insserv.c
+===================================================================
+--- a/insserv.c (revision 885)
++++ b/insserv.c (working copy)
+@@ -97,6 +97,7 @@
+ #define DEFAULT_START DEFAULT START VALUE
+ #define DEFAULT_STOP DEFAULT STOP VALUE
+ #define DESCRIPTION COMM "description" VALUE
++#define INTERACTIVE COMM "x-interactive" VALUE
+
+ /* System facility search within /etc/insserv.conf */
+ #define EQSIGN "([[:blank:]]*[=:][[:blank:]]*|[[:blank:]]+)"
+@@ -133,6 +134,7 @@
+ char *default_start;
+ char *default_stop;
+ char *description;
++ char *interactive;
+ } attribute((aligned(sizeof(char*)))) lsb_t;
+
+ /* Search results points here */
+@@ -147,6 +149,7 @@
+ regex_t def_start;
+ regex_t def_stop;
+ regex_t desc;
++ regex_t interact;
+ } attribute((aligned(sizeof(regex_t)))) reg_t;
+
+ typedef struct creg_struct {
+@@ -1132,6 +1135,7 @@
+ regcompiler(®.def_start, DEFAULT_START, REG_EXTENDED|REG_ICASE|REG_NEWLINE);
+ regcompiler(®.def_stop, DEFAULT_STOP, REG_EXTENDED|REG_ICASE|REG_NEWLINE);
+ regcompiler(®.desc, DESCRIPTION, REG_EXTENDED|REG_ICASE|REG_NEWLINE);
++ regcompiler(®.interact, INTERACTIVE, REG_EXTENDED|REG_ICASE|REG_NEWLINE);
+ }
+
+ static inline void scan_script_reset(void) attribute((always_inline));
+@@ -1147,6 +1151,7 @@
+ xreset(script_inf.default_start);
+ xreset(script_inf.default_stop);
+ xreset(script_inf.description);
++ xreset(script_inf.interactive);
+ }
+
+ #define FOUND_LSB_HEADER 0x01
+@@ -1177,6 +1182,7 @@
+ #define default_start script_inf.default_start
+ #define default_stop script_inf.default_stop
+ #define description script_inf.description
++#define interactive script_inf.interactive
+
+ info("Loading %s\n", path);
+
+@@ -1273,6 +1279,14 @@
+ description = empty;
+ }
+
++ if (!interactive && regexecutor(®.interact, COMMON_ARGS) == true) {
++ if (val->rm_so < val->rm_eo) {
++ *(pbuf+val->rm_eo) = '\0';
++ interactive = xstrdup(pbuf+val->rm_so);
++ } else
++ interactive = empty;
++ }
++
+ /* Skip scanning below from LSB magic end */
+ if ((end = strstr(buf, "### END INIT INFO")))
+ break;
+@@ -1341,6 +1355,7 @@
+ #undef default_start
+ #undef default_stop
+ #undef description
++#undef interactive
+ return ret;
+ }
+
+@@ -1503,6 +1518,7 @@
+ regfree(®.def_start);
+ regfree(®.def_stop);
+ regfree(®.desc);
++ regfree(®.interact);
+ }
+
+ static struct {
+@@ -1776,6 +1792,9 @@
+ if (script_inf.stop_after && script_inf.stop_after != empty) {
+ reversereq(service, REQ_SHLD|REQ_KILL, script_inf.stop_after);
+ }
++ if (script_inf.interactive && 0 == strcmp(script_inf.interactive, "true")) {
++ service->attr.flags |= SERV_INTRACT;
++ }
+ }
+
+ if (name)
+@@ -2807,6 +2826,9 @@
+ if (script_inf.should_stop && script_inf.should_stop != empty) {
+ rememberreq(service, REQ_SHLD|REQ_KILL, script_inf.should_stop);
+ }
++ if (script_inf.interactive && 0 == strcmp(script_inf.interactive, "true")) {
++ service->attr.flags |= SERV_INTRACT;
++ }
+ }
+
+ if (script_inf.start_before && script_inf.start_before != empty) {
Modified: trunk/src/insserv/debian/patches/series
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/patches/series?rev=895&op=diff
==============================================================================
--- trunk/src/insserv/debian/patches/series (original)
+++ trunk/src/insserv/debian/patches/series Thu Jun 25 16:14:36 2009
@@ -4,6 +4,7 @@
40_badboy_segfault.patch
50_symlink_in_initddir.patch
60_all_keyword_start_only.patch
+61_interactive_keyword.patch
70_req_start_all_depends.patch
80_manual_warnings.patch
90_no_runlevel_spec_for_debian.patch
Modified: trunk/src/insserv/debian/run-testsuite
URL: http://svn.debian.org/wsvn/initscripts-ng/trunk/src/insserv/debian/run-testsuite?rev=895&op=diff
==============================================================================
--- trunk/src/insserv/debian/run-testsuite (original)
+++ trunk/src/insserv/debian/run-testsuite Thu Jun 25 16:14:36 2009
@@ -1783,6 +1783,74 @@
check_script_present S goodboy
rm $initddir/../rcS.d/S06badboy
+}
+##########################################################################
+test_x_interactive() {
+echo
+echo "info: Check if X-Interactive header work"
+echo "BTS #458224"
+echo
+
+initdir_purge
+
+# Insert a few scripts to flesh out $initdir
+insertscript first <<EOF || true
+### BEGIN INIT INFO
+# Provides: first
+# Required-Start:
+# Required-Stop:
+# Default-Start: 2
+# Default-Stop: 0
+### END INIT INFO
+EOF
+
+# This test if X-Interactive work with existing scripts when a new
+# script is inserted.
+insertscript alone1 <<'EOF' || true
+### BEGIN INIT INFO
+# Provides: alone1
+# Required-Start: first
+# Required-Stop: first
+# Default-Start: 2
+# Default-Stop: 0
+# X-Interactive: true
+### END INIT INFO
+EOF
+
+insertscript after <<'EOF' || true
+### BEGIN INIT INFO
+# Provides: after
+# Required-Start: first
+# Required-Stop: first
+# Default-Start: 2
+# Default-Stop: 0
+### END INIT INFO
+EOF
+
+# This test if X-Interactive work with new scripts too. The code
+# paths in insserv are different for the two cases.
+insertscript alone2 <<'EOF' || true
+### BEGIN INIT INFO
+# Provides: alone2
+# Required-Start: first
+# Required-Stop: first
+# Default-Start: 2
+# Default-Stop: 0
+# X-Interactive: true
+### END INIT INFO
+EOF
+
+list_rclinks
+
+check_script_present 2 first
+check_script_present 2 after
+check_script_present 2 alone1
+check_script_present 2 alone2
+check_order 2 first after
+check_order 2 first alone1
+check_order 2 first alone2
+${severity}_order 2 alone1 after # This ordering is not guaranteed
+${severity}_order 2 alone2 after # This ordering is not guaranteed
}
##########################################################################
@@ -1820,3 +1888,4 @@
test_all_keyword
test_early_all
test_script_in_runlevel
+test_x_interactive
More information about the Initscripts-ng-commits
mailing list