X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utilities%2Fovs-pki.in;h=1f5286908c32b16ba5650b4df248a76d8829535d;hb=c424adb3ac3460818256181a073b09e92cdc562a;hp=b91d0614b3d396134862a4917b9b5d6e84aeb6d7;hpb=7cdc630f61b34dc4d54eb9fc0379dd18d0930a79;p=openvswitch diff --git a/utilities/ovs-pki.in b/utilities/ovs-pki.in index b91d0614..1f528690 100755 --- a/utilities/ovs-pki.in +++ b/utilities/ovs-pki.in @@ -176,6 +176,15 @@ case $log in *) $log="$PWD/$log" ;; esac +logdir=$(dirname "$log") +if test ! -d "$logdir"; then + mkdir -p -m755 "$logdir" 2>/dev/null || true + if test ! -d "$logdir"; then + echo "$0: log directory $logdir does not exist and cannot be created" >&2 + exit 1 + fi +fi + if test "$command" = "init"; then if test -e "$pkidir" && test "$force" != "yes"; then echo "$0: $pkidir already exists and --force not specified" >&2 @@ -451,13 +460,15 @@ OU = Open vSwitch certifier CN = Open vSwitch certificate for $arg1 EOF if test $keytype = rsa; then - newkey=rsa:$bits + (umask 077 && openssl genrsa -out "$1-privkey.pem" $bits) 1>&3 2>&3 \ + || exit $? else must_exist "$dsaparam" - newkey=dsa:$dsaparam + (umask 077 && openssl gendsa -out "$1-privkey.pem" "$dsaparam") \ + 1>&3 2>&3 || exit $? fi - openssl req -config "$TMP/req.cnf" -text -nodes \ - -newkey $newkey -keyout "$1-privkey.pem" -out "$1-req.pem" 1>&3 2>&3 + openssl req -config "$TMP/req.cnf" -new -text \ + -key "$1-privkey.pem" -out "$1-req.pem" 1>&3 2>&3 } sign_request() { @@ -515,8 +526,14 @@ elif test "$command" = self-sign; then must_exist "$arg1-privkey.pem" must_not_exist "$arg1-cert.pem" - openssl x509 -in "$arg1-req.pem" -out "$arg1-cert.pem" \ - -signkey "$arg1-privkey.pem" -req -text 2>&3 + # Create both the private key and certificate with restricted permissions. + (umask 077 && \ + openssl x509 -in "$arg1-req.pem" -out "$arg1-cert.pem.tmp" \ + -signkey "$arg1-privkey.pem" -req -text) 2>&3 || exit $? + + # Reset the permissions on the certificate to the user's default. + cat "$arg1-cert.pem.tmp" > "$arg1-cert.pem" + rm -f "$arg1-cert.pem.tmp" elif test "$command" = ls; then check_type "$arg2"