当前位置:论坛首页 > BUG提交 > Linux面板

【已记录】特定格式域名解析记录管理出错及分析

发表在 BUG提交2024-11-5 12:13  关闭 [复制链接] 3 384

1.面板版本:9.2.02.操作系统版本:Windows10
3.浏览器版本:Edge 130.0.2849.68


4.故障现象:特定格式域名比如abc.com.cn,DNS接口为阿里API,点提交后,显示错误
此域名配置的dns账号不正确“,而像abc.com或abc.cn之类的没有问题。

5.故障分析:
a. 阿里后台log显示,DomainName为abc.comcn,漏掉了一个点,正确提交应为abc.com.cn

"requestParameters": {
20    "X-Acs-Public-Access": true,
21    "AcsProduct": "Alidns",
22    "DomainName": "abc.comcn",
23    "X-Acs-Ingress-Network": "crossdomain",
24    "ClientPort": 52286,
25    "X-Acs-Account-Site-Type": "domestic",
26    "X-Acs-Client-Request-Host": "alidns.cn-hangzhou.aliyuncs.com"
27  },

b.定位了下代码应该是panel/class/sslModel/base.py这个文件中的extract_zone函数写的不够严谨
    def extract_zone(self,domain_name, is_let_txt=False):
        if is_let_txt:
            domain_name = domain_name.lstrip("*.")
        top_domain = "." + ".".join(domain_name.rsplit('.')[-2:])
        new_top_domain = "." + top_domain.replace(".", "")
        is_tow_top = False
        if top_domain in self.top_domain_list:
            is_tow_top = True
            domain_name = domain_name[:-len(top_domain)] + new_top_domain

        if domain_name.count(".") <= 1:
            zone = ""
            root = domain_name
            acme_txt = "_acme-challenge"
        else:
            zone, middle, last = domain_name.rsplit(".", 2)
            acme_txt = "_acme-challenge.%s" % zone
            if is_tow_top:
                last = top_domain[1:]
            root = ".".join([middle, last])
        return root, zone, acme_txt




希望能尽快修改这个bug,谢谢



使用道具 举报 只看该作者 回复
发表于 2024-11-5 12:24:09 | 显示全部楼层
由于这个错误也会造成,像续定let's encrypt证书时,无法修改dns记录,而出错
使用道具 举报 回复 支持 反对
发表于 2024-11-5 14:16:15 | 显示全部楼层
您好,感谢您的反馈,已记录
使用道具 举报 回复 支持 反对
发表于 2024-11-5 16:26:10 | 显示全部楼层
搞定了,我自己改了下代码,现在好用了,同一个文件,同一个函数,再贴下文件路径/www/server/panel/class/sslModel/base.py
  1. def extract_zone(self, domain_name, is_let_txt=False):
  2.     # Remove wildcard prefix if present
  3.     if is_let_txt:
  4.         domain_name = domain_name.lstrip("*.")

  5.     # Extract the top domain
  6.     split_name = domain_name.rsplit('.', 2)
  7.     if len(split_name) >= 2:
  8.         top_domain = '.' + split_name[-2] + '.' + split_name[-1]
  9.     else:
  10.         top_domain = '.' + domain_name

  11.     # Determine if the domain is in the top-level domain list
  12.     if top_domain in self.top_domain_list:
  13.         root = domain_name
  14.         zone = ''
  15.         acme_txt = "_acme-challenge"
  16.     else:
  17.         # Split the domain name to get the zone, root, and acme_txt
  18.         if domain_name.count(".") <= 1:
  19.             zone = ""
  20.             root = domain_name
  21.             acme_txt = "_acme-challenge"
  22.         else:
  23.             zone, middle, last = domain_name.rsplit(".", 2)
  24.             acme_txt = "_acme-challenge.%s" % zone
  25.             root = ".".join([middle, last])

  26.     return root, zone, acme_txt
复制代码



使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表