123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/bin/sh
- # Make list of configuration variables regarding suid handling
- # input $1: full path to autoconf.h
- # input $2: full path to applets.h
- # input $3: full path to .config
- # output (stdout): list of CONFIG_ that do or may require suid
- # If the environment variable SUID is not set or set to DROP,
- # lists all config options that do not require suid permissions.
- # Otherwise, lists all config options for applets that DO or MAY require
- # suid permissions.
- # Maintainer: Bernhard Reutner-Fischer
- export LC_ALL=POSIX
- export LC_CTYPE=POSIX
- CONFIG_H=${1:-include/autoconf.h}
- APPLETS_H=${2:-include/applets.h}
- DOT_CONFIG=${3:-.config}
- case ${SUID:-DROP} in
- [dD][rR][oO][pP]) USE="DROP" ;;
- *) USE="suid" ;;
- esac
- $HOSTCC -E -DMAKE_SUID -include $CONFIG_H $APPLETS_H |
- awk -v USE=${USE} '
- /^SUID[ \t]/{
- if (USE == "DROP") {
- if ($2 != "BB_SUID_DROP") next
- } else {
- if ($2 == "BB_SUID_DROP") next
- }
- cfg = $NF
- gsub("\"", "", cfg)
- cfg = substr(cfg, 8)
- s[i++] = "CONFIG_" cfg
- s[i++] = "CONFIG_FEATURE_" cfg "_.*"
- }
- END{
- while (getline < ARGV[2]) {
- for (j in s) {
- if ($0 ~ "^" s[j] "=y$") {
- sub(/=.*/, "")
- print
- if (s[j] !~ /\*$/) delete s[j] # can drop this applet now
- }
- }
- }
- }
- ' - $DOT_CONFIG
|