blob: 6492c079a325abc67242c11a8fe144742faba286
1 | #!/bin/sh |
2 | # Make list of configuration variables regarding suid handling |
3 | |
4 | # input $1: full path to autoconf.h |
5 | # input $2: full path to applets.h |
6 | # input $3: full path to .config |
7 | # output (stdout): list of CONFIG_ that do or may require suid |
8 | |
9 | # If the environment variable SUID is not set or set to DROP, |
10 | # lists all config options that do not require suid permissions. |
11 | # Otherwise, lists all config options for applets that DO or MAY require |
12 | # suid permissions. |
13 | |
14 | # Maintainer: Bernhard Reutner-Fischer |
15 | |
16 | export LC_ALL=POSIX |
17 | export LC_CTYPE=POSIX |
18 | |
19 | CONFIG_H=${1:-include/autoconf.h} |
20 | APPLETS_H=${2:-include/applets.h} |
21 | DOT_CONFIG=${3:-.config} |
22 | |
23 | case ${SUID:-DROP} in |
24 | [dD][rR][oO][pP]) USE="DROP" ;; |
25 | *) USE="suid" ;; |
26 | esac |
27 | |
28 | $HOSTCC -E -DMAKE_SUID -include $CONFIG_H $APPLETS_H | |
29 | awk -v USE=${USE} ' |
30 | /^SUID[ \t]/{ |
31 | if (USE == "DROP") { |
32 | if ($2 != "BB_SUID_DROP") next |
33 | } else { |
34 | if ($2 == "BB_SUID_DROP") next |
35 | } |
36 | cfg = $NF |
37 | gsub("\"", "", cfg) |
38 | cfg = substr(cfg, 8) |
39 | s[i++] = "CONFIG_" cfg |
40 | s[i++] = "CONFIG_FEATURE_" cfg "_.*" |
41 | } |
42 | END{ |
43 | while (getline < ARGV[2]) { |
44 | for (j in s) { |
45 | if ($0 ~ "^" s[j] "=y$") { |
46 | sub(/=.*/, "") |
47 | |
48 | if (s[j] !~ /\*$/) delete s[j] # can drop this applet now |
49 | } |
50 | } |
51 | } |
52 | } |
53 | ' - $DOT_CONFIG |
54 | |
55 |