-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 28/04/10 22:35, Davide Brini wrote:
> On Wednesday 28 April 2010, David Sommerseth wrote:
>
>>> + status=$(openssl ocsp -issuer "$issuer" \
>>> + "$nonce" \
>>> + -CAfile "$verify" \
>>> + -url "$ocsp_url" \
>>> + -serial "0x${serial}" 2>/dev/null)
>>> +
>>> + if [ $? -eq 0 ]; then
>>> + # check that it's good
>>> + if echo "$status" | grep -Fq "0x${serial}: good"; then
>>> + exit 0
>>> + fi
>>> + fi
>>> fi
>>
>> What if you just send the result from openssl to awk via a pipe, and
>> call 'exit {0,1}' from awk depending on if it's good or not ... that
>> way, you' don't have to do this grep trickery.
>>
>> Something like this:
>> <untested>
>> openssl ... | awk 'BEGIN{ret=1} /0x(.*): good/{ ret=0; exit } END{
>> exit ret}'
>> exit $?
>> </untested>
>
> Yes, the problem with this is that the pipeline's exit status is that of the
> last command in the pipeline, and there's no standard way to know the exit
> status of previous commands in the pipeline.
> So in your example, if openssl failed for some reason but awk didn't, $?
> would
> be 0, whereas we want the whole thing to fail in that case.
>
> Bash (and some other shell probably) has some special variables to handle
> these situations, which however are extensions and thus not standard.
>
> Now, one could argue that if openssl fails, surely the output will not
> contain
> the magic line we're looking for, and thus awk/grep will fail too. While this
> is probably true in this specific instance, I feel that testing the exit
> status of openssl separately is safer and cleaner.
>
> This also makes it possible (although I didn't implement it) to provide more
> detailed error messages, so one could exit with "openssl failed" (and,
> depending on the actual exit status, even provide the exact error
> explanation)
> or "openssl ran successfully, but the certificate status is not good".
> Instead, if one does just
>
> if openssl ocsp .... | grep; then
> # good
> else
> # error
> fi
>
> all one can say in the "error" branch is the fairly generic "either openssl
> OR
> grep failed", and the actual exit status of openssl would be inaccessible.
>
With this in mind, that OpenSSL can in some circumstances return "good"
while the exit code is != 0 indicating that OpenSSL did have troubles
verifying the certificate - this is the sensible approach ... so ACK!
Patch applied to bugfix2.1 and merged into allmerged
commit 9ca155403ec72c7152bcb05c4bf8588c7cf2617b
kind regards,
David Sommerseth
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iEYEARECAAYFAkvwMG4ACgkQDC186MBRfrqyQgCfRoRTzxDHNFp5ROGCSFgq1+lG
oP0An0YXmczAz/QZ60zoyUNcpA4bp74S
=m605
-----END PGP SIGNATURE-----