Exit codes of smbclient

2019-05-05 06:16发布

问题:

i've a problem with the commandline command "smbclient" of samba on arm.

I wrote a script to download files from a Windows Share. Here the smb-part of this script.

smbclient  //CNAME/SNAME -I0.0.0.0 -N -c "case_sensitive; cd folder; prompt; mget file"
echo $?

My problem ar the exit codes. If the file is downloaded completely, the exit code is 0 (OK) If the file cannot be downloaded, the exit code is 1 (OK) If the testmaschine loses the connection to the share due downloading a file, the exit code is 0 (NOT GOOD), but error ("Lost connection...etc.") is written to console. (OK)

I tried it with two different versions. samba-3.0.32 samba-3.6.19 Both the same.

Does someone know a good workaround (or smbclient-argument) to let my script know, that the download failed?

PS. I checked the smbclient sources. It looks like they forgot to set the exitcode. Because everytime there is another error the set the Errormessage and do an (e.g. exit(1)). But for timeouts, they only set the Errormessage.

Thank you in advance!

回答1:

What would be best is to use the -E argument to smbclient and redirect 2>/errorlog from the command line. You can then check this file to see if any errors occurred.

Warning, the first line is always the Domain=......... so you may need to strip that line out.

Something like this:

smbclient Hostname -A authfile -E 1>log 2>errorlog <<-EOF 
get foo 
EOF

In the errorlog you should find something like below, your log file will be empty

Domain=[Hostname] OS=[Windows Server 2008 R2 Standard 7601 Service Pack 1] Server=[Windows Server 2008 R2 Standard 6.1] NT_STATUS_OBJECT_NAME_NOT_FOUND opening remote file \foo