gpt4 book ai didi

authentication - 使用来自 apache 身份验证的用户名覆盖 mercurial 用户名

转载 作者:行者123 更新时间:2023-12-04 06:21:27 24 4
gpt4 key购买 nike

我已经建立了一个通过 apache2 服务的存储库。用户首先需要对 apache 进行身份验证才能读取/写入存储库。
我注意到,如果用户将一些疯狂的名称设置为“用户名”,该名称将用于提交 - 而不是 apache 身份验证名称。

现在,有没有办法让

  • 用户名替换为 apache 登录名?
  • 或者我将apache登录名添加到提交中定义的用户名?

  • 我知道 subversion 和 apache 将始终使用 apache 登录名,所以 mercurial 也应该可以,对吧?

    编辑:
    我认为我需要编写一个钩子(Hook)来提取 http 用户名并检查它是否与提交用户名匹配。如果不是,则应拒绝推送请求。
    有谁知道如何做到这一点?

    最佳答案

    这是错误的方法,并且肯定会比您现在尝试解决的任何问题引起更多的头痛和问题。

    假设您成功实现了建议的方法,会发生什么?

    好吧,在我尝试推送的本地存储库中,我有变更集 1、2 和 3,带有哈希 ABC、DEF 和 KLM。出于某种原因,根据您提出的更改,我在提交时没有使用 apache 用户名,所以它们是错误的。

    我推送到服务器。

    在飞行中,您的代码将我的提交更改为使用 apache 用户名。这会导致这些变更集的哈希值被重新计算并且不同。换句话说,我的变更集 1、2 和 3 现在将具有散列 XYZ、DEF 和 JKL。

    所以现在我的更改在服务器上。因为我是最后一个克隆人,所以我在推送期间没有发生冲突。

    但是,如果我现在尝试拉动,我现在突然发现有 3 个变更集我没有,所以我拉动那些,发现我现在拥有这 3 个变更集与我拥有的 3 个并行,具有相同的内容,不同的提交者名称和不同的哈希值。

    从现在开始,这就是每次推拉的行为方式。

    您推送,然后您可以立即将“相同”的变更集拉回,并使用新的哈希值,在您的并行分支中。

    现在乐趣开始了。您的本地客户如何发现要推送的内容?它询问服务器,“你有什么?”,然后比较。好吧,服务器仍然没有你的 3 个原始变更集,所以传出命令将计算,嗯,应该推送这 3 个变更集。

    但是,如果您尝试推送它,那么您将重新创建相同的 3 个新变更集,这些变更集无法推送,因此您将遇到麻烦。

    您需要做的是将以下工作流程强加给您的用户:

  • 推送新的变更集
  • 以新的形式拉回新的变更集
  • 删除推送的原始变更集

  • 更好的方法是让服务器首先阻止推送,并提供有关使用错误提交名称的消息。

    然后,您在尝试推送之前将修复这些变更集的责任放在用户身上,例如通过将它们导入 MQ 并一次重新应用它们。

    或不。

    如果我从你那里拉动怎么办?您修复了一个错误,但您还没有准备好将所有内容推送到服务器,所以您允许我从您那里提取,现在我有带有您的名字的传出变更集,以及一个将强制执行我的名字的服务器全部。

    现在你应该意识到这种方法会导致很多问题,你基本上是在试图让分布式版本控制系统表现得像一个集中式版本控制系统。

    关于authentication - 使用来自 apache 身份验证的用户名覆盖 mercurial 用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6507533/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com