0

I have a simple shell script that tests whether a password is correct (or not) against an Apple Open Directory (LDAP) server.

What I'd like is simply to lose the gobblygook error message "Authentication for node /LDAPv3/1..." and instead insert my own language such as "password does not match".

Here's what happens now:

bash-3.2# test-password 

Enter username you'd like to test password for:
jdoe

Enter Password to test for jdoe
asdasdasd
Authentication for node /LDAPv3/127.0.0.1 failed. (-14090, eDSAuthFailed)
<dscl_cmd> DS Error: -14090 (eDSAuthFailed)

What I'd prefer is:

bash-3.2# test-password 

Enter username you'd like to test password for:
jdoe

Enter Password to test for jdoe
asdasdasd
 Password matches!

So I just need to know a way so that the std out error message is muffled...

Here's the script:

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
echo
echo Enter username you\'d like to test password for:
read USERNAME

echo
echo Enter Password to test for "$USERNAME"
read PASSWORD
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD

if [ "$?" = "0" ]; then
       echo "Password is correct"
       exit 0

fi

2 Answers 2

3

It depends on where the error message is being written. Well-behaved UNIX programs write their errors to stderr.

/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD 2> /dev/null  # stderr
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD  > /dev/null  # stdout
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD &> /dev/null  # both

For what it's worth, you can combine this with the if statement. Also, no need for the explicit /usr/bin path in front.

if dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD 2> /dev/null; then
    : # success
else
    : # failure
fi
Sign up to request clarification or add additional context in comments.

1 Comment

John, thanks, your answer was also correct. I appreciate the detail.
2

Just throw away standard output and error:

/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD >/dev/null 2>&1

Unless the dscl program does something devious like open up your /dev/tty device for writing, that should take care of everything.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.