121 lines
2.7 KiB
Bash
Executable File
121 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# $Id: prtcheck,v 1.1.1.1 2003/08/27 11:43:05 opel Exp $
|
|
# (c) 2003, Martin Opel <mo@obbl-net.de>
|
|
# revised 2022 by John McQuah <jmcquah@disroot.org> to address FS#1763
|
|
#
|
|
# Utility to check a port for existence of .signature, .footprint and
|
|
# the mandatory fields in Pkgfile. See "man 1 prtcheck" for details
|
|
#
|
|
# May be redistributed and modified under the terms of the GPL
|
|
# only usable with CRUX Linux, version 1.0 or higher
|
|
#
|
|
# USE AT YOUR OWN RISK
|
|
#
|
|
|
|
|
|
msg() {
|
|
echo -n -e "====> $1"
|
|
}
|
|
|
|
warn() {
|
|
msg "WARNING: $1\n"
|
|
excode=$(( excode+1 ))
|
|
}
|
|
|
|
error() {
|
|
msg "ERROR: $1\n"
|
|
exit -1
|
|
}
|
|
|
|
ok() {
|
|
msg "$(basename "$PWD") ok"
|
|
}
|
|
|
|
get_filename() {
|
|
if [[ "$1" =~ ^(http|https|ftp|file)://.*/(.+) ]]; then
|
|
echo "${BASH_REMATCH[2]}"
|
|
else
|
|
echo "$1"
|
|
fi
|
|
}
|
|
|
|
#
|
|
# read options
|
|
#
|
|
while [ $# -gt 0 ]; do
|
|
if [ "$1" = "--root" ]; then
|
|
convertfootprint="true"
|
|
else
|
|
error "unsupported option \"$1\""
|
|
fi
|
|
shift
|
|
done
|
|
|
|
((excode=0))
|
|
|
|
#
|
|
# Checking footprint
|
|
#
|
|
if [ ! -s .footprint ]; then
|
|
error "no footprint found or empty footprint!"
|
|
fi
|
|
if [ "$convertfootprint" = "true" ]; then
|
|
uid="$(id -nu)"
|
|
gid="$(id -ng)"
|
|
file=".footprint"
|
|
<$file sed -e "s,$uid/$gid,root/root," > $file.tmp
|
|
mv $file.tmp $file
|
|
fi
|
|
if [ "$( <.footprint cut -f 2 | grep -c -v "root/root" )" -gt 0 ]; then
|
|
warn "non-root users found!\nrun \"prtcheck --root\" to convert footprint"
|
|
fi
|
|
|
|
#
|
|
# Checking Pkgfile
|
|
#
|
|
if [ ! -s Pkgfile ]; then
|
|
error "no Pkgfile found or Pkgfile empty!"
|
|
fi
|
|
depends="$(<Pkgfile awk '/^# Depends on:/ {print gensub(/# Depends on:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
|
|
if [ "$depends" = "" ]; then
|
|
warn "no dependencies, please check!"
|
|
fi
|
|
|
|
desc="$(<Pkgfile awk '/^# Description:/ {print gensub(/# Description:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
|
|
url="$(<Pkgfile awk '/^# URL:/ {print gensub(/# URL:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
|
|
maintainer="$(<Pkgfile awk '/^# Maintainer:/ {print gensub(/# Maintainer:[[:blank:]]*(.*)/,"\\1","g",$0)}')"
|
|
|
|
[ -n "$desc" ] || nullvars+=" Description"
|
|
[ -n "$url" ] || nullvars+=" URL"
|
|
[ -n "$maintainer" ] || nullvars+=" Maintainer"
|
|
|
|
[ -z "$nullvars" ] || error "Pkgfile is missing the field(s):$nullvars"
|
|
|
|
#
|
|
# Checking .signature
|
|
#
|
|
[ -s .signature ] || error "no signature file!"
|
|
. Pkgfile
|
|
(( unsigned=0 ))
|
|
|
|
for f in Pkgfile .footprint; do
|
|
if ! grep -q "($f)" .signature; then
|
|
warn "$f not signed"
|
|
unsigned=$(( unsigned+1 ))
|
|
fi
|
|
done
|
|
|
|
for (( p=0; p<${#source[@]}; p++ )); do
|
|
if [ -z "${renames[$p]}" ] || [ "${renames[$p]}" = "SKIP" ]; then
|
|
renames[$p]=$( get_filename "${source[$p]}" )
|
|
fi
|
|
if ! grep -q "(${renames[$p]})" .signature; then
|
|
warn "${renames[$p]} not signed"
|
|
unsigned=$(( unsigned+1 ))
|
|
fi
|
|
done
|
|
|
|
[ "$unsigned" = 0 ] || error "incomplete signature file"
|
|
[ "$excode" = 0 ] && ok || exit $excode
|