Target `.` in SRV records is returned as empty string instead
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 42/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- php
- 领域
- networking
调研方向
Start by tracing resolveAll() with Message::TYPE_SRV through the SRV response parsing path and compare handling of a target of "." with a normal hostname. Add a regression test for the _test2-style record and verify that the returned target is "." rather than an empty string.
由索引模型根据 Issue 内容生成。
描述
Hey all,
Opening this ticket following the suggestion of a maintainer of movim in https://github.com/movim/movim/issues/1408, which uses this lib. I'm not very good at PHP so please bear with me 😅
I believe there might be something wrong the way react dns returns data from SRV records. I have set up two test SRV records as follows:
_test1._tcp.nadia.moe. 300 IN SRV 1 1 6969 nadia.moe.
_test2._tcp.nadia.moe. 300 IN SRV 1 1 0 .
They should return the expected when querying it:
22:43:36 ~/Staging/react-dns-repro $> dig +short SRV _test1._tcp.nadia.moe
1 1 6969 nadia.moe.
22:44:14 ~/Staging/react-dns-repro $> dig +short SRV _test2._tcp.nadia.moe
1 1 0 .
Note the literal . when resolving _test2._tcp.nadia.moe. This . character is not present in the response from React/DNS:
<?php
use React\Dns\Config\Config;
use React\Dns\Resolver\Factory;
use React\Dns\Model\Message;
require __DIR__ . '/vendor/autoload.php';
$config = Config::loadSystemConfigBlocking();
if (!$config->nameservers) {
$config->nameservers[] = '8.8.8.8';
}
$factory = new Factory();
$resolver = $factory->create($config);
$name='_test1._tcp.nadia.moe';
$resolver->resolveAll($name, Message::TYPE_SRV)->then(function (array $ips) use ($name) {
var_dump($ips);
}, function (Exception $e) use ($name) {
echo 'No IPv4 addresses for ' . $name . ': ' . $e->getMessage() . PHP_EOL;
});
$name='_test2._tcp.nadia.moe';
$resolver->resolveAll($name, Message::TYPE_SRV)->then(function (array $ips) use ($name) {
var_dump($ips);
}, function (Exception $e) use ($name) {
echo 'No IPv4 addresses for ' . $name . ': ' . $e->getMessage() . PHP_EOL;
});
array(1) {
[0]=>
array(4) {
["priority"]=>
int(1)
["weight"]=>
int(1)
["port"]=>
int(6969)
["target"]=>
string(9) "nadia.moe"
}
}
array(1) {
[0]=>
array(4) {
["priority"]=>
int(1)
["weight"]=>
int(1)
["port"]=>
int(0)
["target"]=>
string(0) ""
}
}
In the response above, one would expect target to be . instead of the empty string.
This is somewhat relevant because . has a special meaning for SRV records: As per https://datatracker.ietf.org/doc/html/rfc2782, clients must check for this value specified as a target, and understand by it that the service is not provided and should not attempt connection. In the case of movim, it is doing that in https://github.com/movim/movim/blob/5aaacc6b2e05f89fa41007cf7378a4568f648dde/linker.php#L144, but this check is failing as react dns does not return ., but an empty string.
I'm not entirely sure wheter this is expected behavior, but in case it was, perhaps it is worth stating somewhere.
- 主要语言
- PHP
- 星标
- 542
- 派生
- 62
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
reactphp/dns 的其他 Issue
-
bug
难度 3/5 1-2 天 新手友好度 45/100
-
bug new feature
难度 4/5 3-5 天 新手友好度 30/100
-
maintenance
难度 5/5 一周以上 新手友好度 15/100
-
help wanted new feature
难度 4/5 3-5 天 新手友好度 35/100
-
help wanted new feature
难度 5/5 一周以上 新手友好度 32/100
相似的 Issue
-
Solved site promotion gate fails on runner PHP patch drift (expects 8.2.33, runner installs 8.2.34) 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
Automattic/blocks-engine#2161 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
Automattic/static-site-importer#1824 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
-
0. Needs triage bug
难度 2/5 1-3 小时 新手友好度 75/100
-
0. Needs triage 35-feedback bug
难度 2/5 1-3 小时 新手友好度 75/100