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

