Re: Looking up hostname from IP address and connection problem MS SQL Server from php
"James K. Lowden" <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 27 Feb 2015 15:14:52 +0100 Marc-André Legrand <[email protected]> wrote: > Server is "192.168.1.32" > looking up hostname for ip address 192.168.1.32 > osql: warning: no DNS hostname found for "192.168.1.32" > Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time] > [-R number] [-m flag] hostname [server] [etc.] > -m set memory debugging flag (trace|record|usage) > osql: no IP address found for "" There is an odd error in osql that I don't see. I would run it as $ sh -x $(which osql) -S MyMSSQLServerName -U user -P password to watch for the last assignment to the HOST variable. The relevant lines start at line 340: if [ "${HOST}" = "$(echo ${HOST} | sed 's/[^.0-9]*//')" ] then ADDRESS=${HOST} echo 'looking up hostname for ip address' ${ADDRESS} HOST=$(host ${HOST} | awk '/domain/ {print $5}' | sed 's/\.$//') if [ -z "${HOST}" ] then echo "$(basename $0): warning: \ no DNS hostname found for \"${ADDRESS}\"" HOST=${ADDRESS} # restore host address string fi fi In English: if host is all numeric characters addr = host # save name look for hostname of address with host->awk->sed if no hostname found (host is "") issue message host = addr # restore name I don't see how that can fail. Logically, it seems that if [ -z "${HOST}" ] evaluates to False even though HOST is in fact a zero-length string. We know it's numeric going in because we see the message osql: warning: no DNS hostname found for "192.168.1.32" and zero-length coming out because we see osql: no IP address found for "" Running the script with the -x option should reveal where it goes wrong. BTW, this test might be improved: [ "${HOST}" = "$(echo ${HOST} | sed 's/[^.0-9]*//')" ] written as [ ${HOST} -a -z ${HOST%%[.0-9]*} ] The first version tests if HOST is the same after non-digits (and '.') are removed. The second tests if HOST comprises only digits and '.'. The things you learn.... --jkl