You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python3的python3-ldb包向本地Samba的*.ldb文件添加或修改记录?

如何使用Python3的python3-ldb包向本地Samba的*.ldb文件添加或修改记录?

看起来你遇到的这个Operations error问题,大概率是两个原因:要么是文件权限不够,要么是修改的代码流程不对,我来一步步帮你解决:

首先,先排查最常见的权限问题:

  • 你先打开终端,运行ls -l base.ldb看看这个文件的权限和所有者。Samba的LDB文件通常是root或者sambashare用户组拥有的,普通用户直接写肯定会被拒绝。解决方法很简单,用sudo运行你的Python脚本就行,比如sudo python3 dd.py。如果不想每次用sudo,也可以把你的用户加入sambashare组(不过更推荐用sudo,避免权限风险)。

然后,修正你的代码操作流程:
你之前直接在搜索返回的条目上调用add()是不对的,python3-ldb要求你通过Ldb对象的modify()方法来提交修改,而不是直接操作搜索结果。我给你改了代码,你可以试试:

import ldb
from ldb import MessageElement, Message

# 打开LDB文件(默认是可写模式,前提是有权限)
dbl = ldb.Ldb("base.ldb")

# 搜索目标条目
target_dn = "CN=admin,CN=Users,DC=nulex,DC=test"
for entry in dbl.search(target_dn):
    # 先打印现有属性,确认找到正确的条目
    for attr, value in entry.items():
        print(f"{attr}: {value}")
    
    # 构建修改操作的Message对象
    mod_msg = ldb.Message()
    mod_msg.dn = entry.dn  # 指定要修改的条目DN
    # 添加新属性:FLAG_MOD_ADD表示添加属性,如果是修改用FLAG_MOD_REPLACE
    mod_msg.add(MessageElement('ssdfsdf', ldb.FLAG_MOD_ADD, "MYMYSSS"))
    
    # 提交修改
    try:
        dbl.modify(mod_msg)
        print("属性添加成功!")
    except ldb.LdbError as e:
        print(f"修改出错: {e}")

另外还有几个要注意的点:

  • 如果你是要修改已有的属性值,把ldb.FLAG_MOD_ADD换成ldb.FLAG_MOD_REPLACE;如果要删除属性,就用ldb.FLAG_MOD_DELETE
  • 要是你添加的是自定义属性(比如MYMYSSS这种),Samba的LDB一般是允许的,但如果遇到schema相关的错误,你可能需要确认属性名是否符合LDAP命名规范(比如不能有特殊字符)。
  • 还有一种可能:如果Samba服务正在运行,可能会锁定LDB文件,导致无法修改。这时候你可以先临时停止Samba服务,修改完再重启,比如sudo systemctl stop smbd nmbd,修改后再sudo systemctl start smbd nmbd

备注:内容来源于stack exchange,提问作者Jessy James stands with Russia

火山引擎 最新活动