Author: geissert Date: 2011-09-19 23:46:28 +0000 (Mon, 19 Sep 2011) New Revision: 17262 Modified: bin/gen-DSA Log: Automatically find a suitable DSA id Usage: bin/gen-DSA package vuln ... Modified: bin/gen-DSA ==================================================================--- bin/gen-DSA 2011-09-19 22:40:30 UTC (rev 17261) +++ bin/gen-DSA 2011-09-19 23:46:28 UTC (rev 17262) @@ -31,8 +31,8 @@ exit 1 } -[ $# -ge 3 ] || { - echo "usage: $0 [--save] DSA package vulnerability [cve(s) [bugnumber]]" >&2 +[ $# -ge 2 ] || { + echo "usage: $0 [--save] [DSA] package vulnerability [cve(s) [bugnumber]]" >&2 exit 1 } @@ -42,12 +42,17 @@ shift fi -DSAID="$1" -PACKAGE="$(printf ''%s'' "$2" | tr "[:upper:]" "[:lower:]")" -VULNERABILITY="$3" -CVE="$(printf ''%s'' "$4" | tr "[:lower:]" "[:upper:]")" -BUGNUM="$5" +DSAID+if printf ''%s'' "$1" | grep -Eq ''^[0-9]+(-[0-9]+|)$''; then + DSAID="$1" + shift +fi +PACKAGE="$(printf ''%s'' "$1" | tr "[:upper:]" "[:lower:]")" +VULNERABILITY="$2" +CVE="$(printf ''%s'' "$3" | tr "[:lower:]" "[:upper:]")" +BUGNUM="$4" + CVE="$(printf ''%s'' "$CVE" | sed ''s/[ ,;]+/ /g'' | tr '' '' "\n" | sort -n | tr "\n" '' '')" cve_spacing @@ -58,7 +63,7 @@ CVE_LIST="$(printf ''%s'' "$CVE" | sed -r "$sed_cmd")" case "$DSAID" in - *-*) + *-*|'''') : ;; *) @@ -67,7 +72,27 @@ ;; esac -if grep -wq "DSA-$DSAID" data/DSA/list; then +dsa_exists() { + grep -wq "DSA-$1" data/DSA/list +} + +if [ -z "$DSAID" ]; then + latest_dsa="$(sed -r ''/DSA-/{s/^.+DSA-([0-9]+).*$/\1/;q}'' data/DSA/list)" + dsa=$(($latest_dsa+1)) + c=0 + while dsa_exists "$dsa-1"; do + dsa=$(($dsa+1)) + c=$(($c+1)) + if [ $c -eq 10 ]; then + echo "error: unable to find an unused DSA id after $c attempts" >&2 + echo "to workaround specify an id as the first parameter" >&2 + exit 1 + fi + done + DSAID="$dsa-1" +fi + +if dsa_exists "$DSAID"; then echo "error: DSA-$DSAID has already been used" >&2 exit 1 fi