diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-16 17:16:40 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-16 17:16:40 +0200 |
commit | 51ca7761a3579f3c3f7e771b39019e6e248a5171 (patch) | |
tree | 04621b8f401e5a478070e633fb2c086c05c99695 | |
parent | 5d26df6497505e8ed486bf3e3ba65d0d6f0daa15 (diff) | |
download | busybox-w32-51ca7761a3579f3c3f7e771b39019e6e248a5171.tar.gz busybox-w32-51ca7761a3579f3c3f7e771b39019e6e248a5171.tar.bz2 busybox-w32-51ca7761a3579f3c3f7e771b39019e6e248a5171.zip |
cttyhack: move build system bits into cttyhack.c, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | include/applets.src.h | 1 | ||||
-rw-r--r-- | include/usage.src.h | 11 | ||||
-rw-r--r-- | shell/Config.src | 36 | ||||
-rw-r--r-- | shell/Kbuild.src | 1 | ||||
-rw-r--r-- | shell/ash.c | 1 | ||||
-rw-r--r-- | shell/cttyhack.c | 52 |
6 files changed, 53 insertions, 49 deletions
diff --git a/include/applets.src.h b/include/applets.src.h index 6ca0c3230..195598fee 100644 --- a/include/applets.src.h +++ b/include/applets.src.h | |||
@@ -104,7 +104,6 @@ IF_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_DROP)) | |||
104 | IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) | 104 | IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) |
105 | IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) | 105 | IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) |
106 | IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP)) | 106 | IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP)) |
107 | IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP)) | ||
108 | IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut)) | 107 | IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut)) |
109 | IF_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_DROP)) | 108 | IF_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_DROP)) |
110 | IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) | 109 | IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) |
diff --git a/include/usage.src.h b/include/usage.src.h index 46d64c135..9b326eebb 100644 --- a/include/usage.src.h +++ b/include/usage.src.h | |||
@@ -678,17 +678,6 @@ INSERT | |||
678 | "\n -S SALT" \ | 678 | "\n -S SALT" \ |
679 | ) \ | 679 | ) \ |
680 | 680 | ||
681 | #define cttyhack_trivial_usage \ | ||
682 | "PROG ARGS" | ||
683 | #define cttyhack_full_usage "\n\n" \ | ||
684 | "Give PROG a controlling tty if possible." \ | ||
685 | "\nExample for /etc/inittab (for busybox init):" \ | ||
686 | "\n ::respawn:/bin/cttyhack /bin/sh" \ | ||
687 | "\nGiving controlling tty to shell running with PID 1:" \ | ||
688 | "\n $ exec cttyhack sh" \ | ||
689 | "\nStarting interactive shell from boot shell script:" \ | ||
690 | "\n setsid cttyhack sh" \ | ||
691 | |||
692 | #define cut_trivial_usage \ | 681 | #define cut_trivial_usage \ |
693 | "[OPTIONS] [FILE]..." | 682 | "[OPTIONS] [FILE]..." |
694 | #define cut_full_usage "\n\n" \ | 683 | #define cut_full_usage "\n\n" \ |
diff --git a/shell/Config.src b/shell/Config.src index 6389d943a..f6f0b6c94 100644 --- a/shell/Config.src +++ b/shell/Config.src | |||
@@ -158,40 +158,4 @@ config FEATURE_SH_NOFORK | |||
158 | 158 | ||
159 | This feature is relatively new. Use with care. | 159 | This feature is relatively new. Use with care. |
160 | 160 | ||
161 | config CTTYHACK | ||
162 | bool "cttyhack" | ||
163 | default y | ||
164 | help | ||
165 | One common problem reported on the mailing list is "can't access tty; | ||
166 | job control turned off" error message which typically appears when | ||
167 | one tries to use shell with stdin/stdout opened to /dev/console. | ||
168 | This device is special - it cannot be a controlling tty. | ||
169 | |||
170 | Proper solution is to use correct device instead of /dev/console. | ||
171 | |||
172 | cttyhack provides "quick and dirty" solution to this problem. | ||
173 | It analyzes stdin with various ioctls, trying to determine whether | ||
174 | it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line). | ||
175 | If it detects one, it closes stdin/out/err and reopens that device. | ||
176 | Then it executes given program. Opening the device will make | ||
177 | that device a controlling tty. This may require cttyhack | ||
178 | to be a session leader. | ||
179 | |||
180 | Example for /etc/inittab (for busybox init): | ||
181 | |||
182 | ::respawn:/bin/cttyhack /bin/sh | ||
183 | |||
184 | Starting an interactive shell from boot shell script: | ||
185 | |||
186 | setsid cttyhack sh | ||
187 | |||
188 | Giving controlling tty to shell running with PID 1: | ||
189 | |||
190 | # exec cttyhack sh | ||
191 | |||
192 | Without cttyhack, you need to know exact tty name, | ||
193 | and do something like this: | ||
194 | |||
195 | # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1' | ||
196 | |||
197 | endmenu | 161 | endmenu |
diff --git a/shell/Kbuild.src b/shell/Kbuild.src index bce99240f..a669bdfb0 100644 --- a/shell/Kbuild.src +++ b/shell/Kbuild.src | |||
@@ -8,5 +8,4 @@ lib-y:= | |||
8 | 8 | ||
9 | INSERT | 9 | INSERT |
10 | 10 | ||
11 | lib-$(CONFIG_CTTYHACK) += cttyhack.o | ||
12 | lib-$(CONFIG_SH_MATH_SUPPORT) += math.o | 11 | lib-$(CONFIG_SH_MATH_SUPPORT) += math.o |
diff --git a/shell/ash.c b/shell/ash.c index 9b33e78ec..fd119fa51 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -179,6 +179,7 @@ | |||
179 | //config: "PS#" may contain volatile content, such as backquote commands. | 179 | //config: "PS#" may contain volatile content, such as backquote commands. |
180 | //config: This option recreates the prompt string from the environment | 180 | //config: This option recreates the prompt string from the environment |
181 | //config: variable each time it is displayed. | 181 | //config: variable each time it is displayed. |
182 | //config: | ||
182 | 183 | ||
183 | //usage:#define ash_trivial_usage NOUSAGE_STR | 184 | //usage:#define ash_trivial_usage NOUSAGE_STR |
184 | //usage:#define ash_full_usage "" | 185 | //usage:#define ash_full_usage "" |
diff --git a/shell/cttyhack.c b/shell/cttyhack.c index 67736ad62..7af13fdfd 100644 --- a/shell/cttyhack.c +++ b/shell/cttyhack.c | |||
@@ -6,6 +6,58 @@ | |||
6 | */ | 6 | */ |
7 | #include "libbb.h" | 7 | #include "libbb.h" |
8 | 8 | ||
9 | //applet:IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP)) | ||
10 | |||
11 | //kbuild:lib-$(CONFIG_CTTYHACK) += cttyhack.o | ||
12 | |||
13 | //config:config CTTYHACK | ||
14 | //config: bool "cttyhack" | ||
15 | //config: default y | ||
16 | //config: help | ||
17 | //config: One common problem reported on the mailing list is "can't access tty; | ||
18 | //config: job control turned off" error message which typically appears when | ||
19 | //config: one tries to use shell with stdin/stdout opened to /dev/console. | ||
20 | //config: This device is special - it cannot be a controlling tty. | ||
21 | //config: | ||
22 | //config: Proper solution is to use correct device instead of /dev/console. | ||
23 | //config: | ||
24 | //config: cttyhack provides "quick and dirty" solution to this problem. | ||
25 | //config: It analyzes stdin with various ioctls, trying to determine whether | ||
26 | //config: it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line). | ||
27 | //config: If it detects one, it closes stdin/out/err and reopens that device. | ||
28 | //config: Then it executes given program. Opening the device will make | ||
29 | //config: that device a controlling tty. This may require cttyhack | ||
30 | //config: to be a session leader. | ||
31 | //config: | ||
32 | //config: Example for /etc/inittab (for busybox init): | ||
33 | //config: | ||
34 | //config: ::respawn:/bin/cttyhack /bin/sh | ||
35 | //config: | ||
36 | //config: Starting an interactive shell from boot shell script: | ||
37 | //config: | ||
38 | //config: setsid cttyhack sh | ||
39 | //config: | ||
40 | //config: Giving controlling tty to shell running with PID 1: | ||
41 | //config: | ||
42 | //config: # exec cttyhack sh | ||
43 | //config: | ||
44 | //config: Without cttyhack, you need to know exact tty name, | ||
45 | //config: and do something like this: | ||
46 | //config: | ||
47 | //config: # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1' | ||
48 | //config: | ||
49 | |||
50 | //usage:#define cttyhack_trivial_usage | ||
51 | //usage: "PROG ARGS" | ||
52 | //usage:#define cttyhack_full_usage "\n\n" | ||
53 | //usage: "Give PROG a controlling tty if possible." | ||
54 | //usage: "\nExample for /etc/inittab (for busybox init):" | ||
55 | //usage: "\n ::respawn:/bin/cttyhack /bin/sh" | ||
56 | //usage: "\nGiving controlling tty to shell running with PID 1:" | ||
57 | //usage: "\n $ exec cttyhack sh" | ||
58 | //usage: "\nStarting interactive shell from boot shell script:" | ||
59 | //usage: "\n setsid cttyhack sh" | ||
60 | |||
9 | /* From <linux/vt.h> */ | 61 | /* From <linux/vt.h> */ |
10 | struct vt_stat { | 62 | struct vt_stat { |
11 | unsigned short v_active; /* active vt */ | 63 | unsigned short v_active; /* active vt */ |