摘要

  • LIST ACTIVE 的 y、n、m 是服务器对新闻组通常处理方式的说明,不是按当前客户端定制的授权结论。
  • y 组仍可拒绝某个客户端;拥有特殊权限的客户端也可能向 n 组投稿,真正可执行的证据来自当时的 POST 响应。
  • 目录可见性、身份认证、站点授权、文章注入和最终可读性属于不同控制面,不能压缩成一枚“可发帖”图标。

两个方向都可能不一致

先看最容易造成用户损失的一种情况。阅读器取得活动新闻组列表,看见 research.local ... y,于是把输入框标成可用。用户写完正文,客户端才询问 POST,服务器立即以 440 拒绝。目录没有失效;它从未承诺这个账户可以通过。

反方向也成立。RFC 3977 明确设想,具有规范外特殊权限的客户端可能向状态为 n 的组投稿。n 仍表示通常不接收投稿,但它不是一份囊括所有例外的全球禁令。

这两个相反例子共同限定了字段的证据范围。若只讲前一个,人们容易把目录理解为过时缓存;若只讲后一个,又会误以为状态毫无意义。协议真正表达的是:群组基线与会话权限都是事实,只是回答不同问题。

1986 年的规范已经写下警告

RFC 977 把早期 LIST 响应定义为四项:新闻组名、最后文章号、第一文章号,以及 y 或 n 投稿标记。紧接着,文档提醒实现者:即使列表说某组允许投稿,某个客户端仍可能被禁止。

原因在于新闻组自身有常规属性。某些组接受普通投稿,某些组是 moderated 或 digest,需要走版主路径;这与服务器授予某台客户端或主机的权限彼此独立。

个体判断出现在命令交互中。POST 得到 340,客户端才可以开始发送多行文章;得到 440,投稿就在正文传输前停止。RFC 977 还把判断方法留给站点部署,没有宣称 LIST 能代替本地访问控制。

所以,协议从第一版就容纳了两套相似语言:目录中的“允许”描述组的普通制度,命令中的“允许”描述本次连接能否行动。读者界面若把二者写成一句话,便抹掉了最重要的限定词。

ACTIVE 不是互联网总名册

RFC 3977 后来把这一形式命名为 LIST ACTIVE。若没有过滤表达式,服务器要列出当前客户端可以用 GROUP 选择的新闻组。这意味着目录本身就是某台服务器面向连接提供的局部视图,而不是 Usenet 全局命名空间的权威镜像。

每行记录高水位、低水位和该服务器上的当前状态。典型值为:y,通常允许投稿;n,通常不允许;m,来稿会转交新闻组版主。若出现未识别状态,客户端只能认为它没有提供信息,而不能擅自类比成其中一个标准值。

规范随后给出核心边界:状态只表示对该组投稿的通常处理方式,并不必然为具体客户端定制。被禁止投稿的客户端不会因为看见 y 获得权利;特殊客户端也不会因为看见 n 自动失去例外。

“通常”让这份目录既能工作,也不越权。它足以帮助软件解释一个组的默认流程,却不必把每个账户、源地址、连接保护状态和临时政策展开成无限多份目录。

真正的投稿是一串可观察决定

在 RFC 3977 中,POST 的第一次回答仍是 340 或 440。正文传完后,还会得到 240 或 441。这两道结果不能合并:前者决定是否让正文过链路,后者表示服务器是否接收已经传来的文章。

即使得到 240,客户端也不能断言文章已经对读者可见。文章可能等待进一步处理、版主决定或转发。可见性需要另行查询。由此形成至少四层证据:组的常规状态、会话提交资格、文章接收结果、读者侧可获取性。

这种分层对隐私同样重要。若软件因为 y 就预先上传敏感草稿,直到正文结束后才发现账户无权投稿,那么一个显示层的过度推断已经造成不可撤回的披露。正确做法是先取得本次会话的命令判断。

认证会改变身份,不会扩大目录语义

RFC 4643 用 480 表示客户端必须先认证和/或取得授权,才能使用某命令或资源。AUTHINFO 成功后,服务器可以公布不同的能力集,因为连接所代表的主体发生了变化。

但是认证成功并不等于全面放行。规范明确允许服务器接受身份后,仍以 502 拒绝部分甚至全部资源。认证证明服务器在这一会话里接受了谁;具体授权仍由站点政策作出。

因此,安全客户端不能只以“组名 + y/n/m”缓存权限。连接是否加密、身份是谁、服务器端点、组政策版本和账户例外都可能变化,而活动目录那一行完全不变。每次安全或身份状态转换后,客户端都应重新观察能力,并让实际命令获得新的裁决。

m 描述路线,不证明版主

m 表示投稿会被转交版主,但它不验证版主身份,也不保证批准。RFC 5537 刻意区分 posting、injecting、relaying、serving、reading agent 与 moderator,因为一篇 Netnews 文章在不同阶段由不同角色负责。

已有 Sofia Ren 文章讨论 Approved 字段及版主权力,这里不重讲那段历史。m 在本题中的作用,是证明活动目录记录的是“通常走哪条处理路径”,而不是“当前用户拥有什么权利”。允许提交也不证明作者身份,更不证明后续服务器一定传播或展示文章。

注册名称保持动词分离

IANA NNTP 参数注册表 分别登记 LIST、POST、AUTHINFO 与 READER。注册表不说明某一服务器当前部署了什么,却为目录、提交、身份和阅读提供了互不替代的标准名称。

这项分离留下了一条至今仍有用的工程原则:摘要面可以描述大量对象,但不能因为方便就升级成授权机关。绿色状态是真实的服务器政策信号;它只是没有回答“你现在能不能发”。

真正属于当前客户端的灯,要等 POST 在当前会话里亮起。

来源