【发布时间】:2011-08-22 16:51:46
【问题描述】:
我目前在 Ubuntu 中访问 Windows 打印共享时遇到问题(在工作中,所以我无法访问他们的设置),所以我最终开始研究Gnome 的 'system-config-printer' 是用 Python 编写的,它使用 Python smbc 绑定 Samba。
我基本上已经设法将我的问题归结为这段代码,它来自 /usr/share/system-config-printer/pysmb.py,我在 python 命令行 shell 中运行:
import smbc, os
def do_auth (svr, shr, wg, un, pw):
return ("myworkdomain.com", "MYWORKUSERNAME", "MYWORKPASSWORD")
ctx = smbc.Context (debug=10, auth_fn=do_auth)
f = ctx.open ("smb://%s/%s" % ("printserver.myworkdomain.com", "PRINTSHARENAME"), os.O_RDWR, 0777)
第一个(某种)问题是在执行ctx = smbc.Context... 行时,Python 总是抱怨:
params.c:OpenConfFile() - Unable to open configuration file "/home/MYUSERNAME/.smb/smb.conf":
No such file or directory
...但也许这不是一个真正的问题? (也许smbc 是应该重新创建这个文件?)。
当然,最大的问题是我无法连接到共享:在执行f = ctx.open... 行之后,有大量 Samba 通信转储,Windows 服务器似乎正在通话等 - 连接工作以失败:
SPNEGO login failed: Logon failure
cli_init_creds: user domain myworkdomain.com
session setup ok
map_errno_from_nt_status: 32 bit codes: code=c0000022
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
smbc.PermissionError: (13, 'Permission denied')
基本上,我对 Samba 知之甚少,无法阅读错误日志的其余部分,但我找到了以下行:
cli_init_creds: user domain myworkdomain.com
... 非常可疑 - 'user' 看起来好像有一个空字符串 - 尽管我希望它是 'MYWORKUSERNAME',由 'do_auth' 函数指定多于!!
请注意,此故障与我过去使用 cmdline smbclient(请参阅 Obtaining Windows printer share SMB settings (for tsclient/rdesktop on Linux) - Super User)时遇到的 NT_STATUS_LOGON_FAILURE 有点相似,这是通过在命令行上明确指定 Windows 工作组来解决的 - 但是,我无法判断这是否也是 Python 案例中的问题;或者如果相反,这里没有传递用户名(或者完全是第三个)。编辑:这个工作命令行(列出共享)是(关于这个例子):
smbclient -L \\printserver.myworkdomain.com -U MYWORKUSERNAME -W myworkdomain.com
提前感谢您的任何建议,
干杯!
【问题讨论】:
标签: python windows linux authentication samba