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