Reputation: 255
Code:
DKIM_RECORD='v=DKIM1\;t=s\;n=core\;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr0WehGwX2nEq4WY3OmiGnYtRt2941lJBsoDMV485apTs4MagWxuzRCkil7/A9fV/FJdt+bzRcdgurcZBbrwI5PpfACUP4ghL9ZU8H9lwbWIGNu0hpqEE+0cdigB1S54B7Fj/AXx5hA9nBuNA27KD+hpBx4ToUIDhDFy9A6BodO6yHr/CkccGuZJO7dMPMWyycx+CTaJSB4fDQmwtPbYf9NHaucud0h902DIajfiJpZ4CEvCjNU8pcsAXecCBLqnWLkj2b7AxYpX+A4+z1GR5mul1IQQcfkspm1v/ihdWZ+FogtquMpos9u+6OSnXkQfYW83XED6hNE335kgoSDAWgQIDAQAB'
DKIM_RESPONSE=`dig @ns0.transip.net default._domainkey.randomdomain.nl TXT +short | tr -d '" ' `
if [[ $DKIM_RESPONSE != $DKIM_RECORD ]]; then
echo "$DKIM_RESPONSE"
echo "$DKIM_RECORD"
echo "randomdomain.nl: DKIM failed"
fi
Result:
v=DKIM1\;t=s\;n=core\;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr0WehGwX2nEq4WY3OmiGnYtRt2941lJBsoDMV485apTs4MagWxuzRCkil7/A9fV/FJdt+bzRcdgurcZBbrwI5PpfACUP4ghL9ZU8H9lwbWIGNu0hpqEE+0cdigB1S54B7Fj/AXx5hA9nBuNA27KD+hpBx4ToUIDhDFy9A6BodO6yHr/CkccGuZJO7dMPMWyycx+CTaJSB4fDQmwtPbYf9NHaucud0h902DIajfiJpZ4CEvCjNU8pcsAXecCBLqnWLkj2b7AxYpX+A4+z1GR5mul1IQQcfkspm1v/ihdWZ+FogtquMpos9u+6OSnXkQfYW83XED6hNE335kgoSDAWgQIDAQAB
v=DKIM1\;t=s\;n=core\;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr0WehGwX2nEq4WY3OmiGnYtRt2941lJBsoDMV485apTs4MagWxuzRCkil7/A9fV/FJdt+bzRcdgurcZBbrwI5PpfACUP4ghL9ZU8H9lwbWIGNu0hpqEE+0cdigB1S54B7Fj/AXx5hA9nBuNA27KD+hpBx4ToUIDhDFy9A6BodO6yHr/CkccGuZJO7dMPMWyycx+CTaJSB4fDQmwtPbYf9NHaucud0h902DIajfiJpZ4CEvCjNU8pcsAXecCBLqnWLkj2b7AxYpX+A4+z1GR5mul1IQQcfkspm1v/ihdWZ+FogtquMpos9u+6OSnXkQfYW83XED6hNE335kgoSDAWgQIDAQAB
randomdomain.nl: DKIM failed
Somehow both string seem equal, but bash evaluates as inequal. What's going wrong here?
Upvotes: 2
Views: 1033
Reputation: 531325
When the right-hand argument of the !=
is not quoted, it is treated as a pattern to match against, not a literal string to compare to. DKIM_RECORD
contains a backslash, so when its expansion is interpreted as a pattern, the backslash is used to escape the following character, then is removed. This means the value on the left no longer matches the value on the right. A smaller example should make it clearer.
$ foo="x\;y"
$ bar="x\;y"
# Here, the value of foo is matched against the pattern "x;y"
$ [[ $foo != $bar ]] && echo no match
no match
# Here, the value of $foo is compared to the string "x\;y"
$ [[ $foo != "$bar" ]] && echo no match
$
You simply need to quote the right-hand argument:
if [[ $DKIM_RESPONSE != "$DKIM_RECORD" ]]; then
Upvotes: 9