smbw 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/sh
  2. # original version from: http://willem.engen.nl/projects/cupssmb/
  3. # additional code by rcrsn51 2011-11-26
  4. if [ "$1" = "" ]; then
  5. # list supported output types
  6. echo 'network smbw "Unknown" "Windows/Samba Printer"'
  7. exit 0
  8. fi
  9. job="$1"
  10. account="$2"
  11. title="$3"
  12. numcopies="$4"
  13. options="$5"
  14. filename="$6"
  15. if [ "$filename" = "" ]; then
  16. filename=-
  17. fi
  18. REST=$DEVICE_URI
  19. SUBNET=${REST#*\?}
  20. [ "$SUBNET" = "$REST" ] && SUBNET=""
  21. REST=${REST%\?*}
  22. PRINTER=${REST##*/}
  23. [ "$PRINTER" = "$REST" ] && exit 1
  24. REST=${REST%/*}
  25. SERVER=${REST##*/}
  26. [ "$SERVER" = "$REST" ] && exit 1
  27. REST=${REST%/*}
  28. WORKGROUP=${REST#*@}
  29. if [ "$WORKGROUP" = "$REST" ]; then
  30. WORKGROUP=""
  31. PASSWORD=""
  32. USERNAME=""
  33. else
  34. REST=${REST%@*}
  35. PASSWORD=${REST##*:}
  36. [ "$PASSWORD" = "$REST" ] && exit 1
  37. REST=${REST%:*}
  38. USERNAME=${REST##*/}
  39. [ "$USERNAME" = "$REST" ] && exit 1
  40. fi
  41. if [ -n "$SUBNET" ]; then
  42. SERVER=`nbtscan -q -t 5 ${SUBNET}/24 | grep -i $SERVER | cut -d " " -f 1`
  43. [ -z "$SERVER" ] && exit 1
  44. fi
  45. # and print using smbclient
  46. echo "NOTICE: smbclient -c \"print ${filename}\" //${SERVER}/${PRINTER}" 1>&2
  47. if [ -z "$USERNAME" ]; then
  48. errtxt=`smbclient -N -c "print ${filename}" //${SERVER}/${PRINTER} 2>&1`
  49. ret=${?}
  50. else
  51. errtxt=`smbclient -U $USERNAME%$PASSWORD -W $WORKGROUP -c "print ${filename}" //${SERVER}/${PRINTER} 2>&1`
  52. ret=${?}
  53. fi
  54. #
  55. # Handle errors
  56. # see backend(7) for error codes
  57. # log message
  58. if [ "$ret" = "0" ]; then
  59. echo "$errtxt" | sed 's/^/NOTICE: /' 1>&2
  60. else
  61. echo "$errtxt" | sed 's/^/ERROR: /' 1>&2
  62. fi
  63. # "NT_STATUS_LOGON_FAILURE" -> CUPS_BACKEND_AUTH_REQUIRED
  64. echo "$errtxt" | grep -i 'LOGON_FAILURE' >/dev/null && exit 2
  65. # "Unable to open credentials file!" -> CUPS_BACKEND_AUTH_REQUIRED
  66. echo "$errtxt" | grep -i 'credentials' >/dev/null && exit 2
  67. # "NT_STATUS_BAD_NETWORK_NAME" -> CUPS_BACKEND_STOP
  68. echo "$errtxt" | grep -i 'BAD_NETWORK_NAME' >/dev/null && exit 4
  69. # something went wrong, don't know what -> CUPS_BACKEND_FAILED
  70. [ "$ret" != "0" ] && exit 1
  71. # success! -> CUPS_BACKEND_OK
  72. exit 0