#!/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