subdomain/dns (cloudflare) error

Description

I encountered an error trying to create a new subdomain. I think it may be related to dns because I am also getting a fatal error when trying to view the “Manage DNS” page.

Prior to writing this, I moved to edge to see if there was a problem that has already been addressed, but the behavior is the same.

cpcmd scope:set cp.update-policy edge
upcp —reset

Steps to Reproduce (in the web panel)

  • Log in to any site.
  • Click DNS → DNS Manager.

Debug Info (anonymized)

         0. Opcenter\Dns\Providers\Cloudflare\Module->zoneAxfr("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:571]
         1. Dns_Module->get_zone_data("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:1762]
         2. Dns_Module->get_zone_information("mydomain.com")
            [/usr/local/apnscp/lib/Module/Skeleton/Standard.php:146]
         3. Module\Skeleton\Standard->_invoke("get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpfunction.php:991]
         4. apnscpFunctionInterceptor->call("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpFunctionInterceptorTrait.php:34]
         5. Page_Container->afiCall("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/html/page_container.php:646]
         6. Page_Container->__call("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/apps/dns/dns.php:143]
         7. apps\dns\Page->_populateZoneCache("mydomain.com")
            [/usr/local/apnscp/apps/dns/dns.php:78]
         8. apps\dns\Page->__construct()
            [/usr/local/apnscp/lib/ContextableTrait.php:41]
         9. Page_Container::instantiateContexted(Auth_Info_User, [username:"myuser", domain:"mydomain.com", level:2, site_id:6, group_id:1005, user_id:9994, id:"xxxxxxxxxxxxxxxxxxx", hotworker:929451, language:"C", ])
            [/usr/local/apnscp/lib/html/page_container.php:405]
        10. Page_Container::init("\apps\dns\Page")
            [/usr/local/apnscp/public/index.php:99]
strlen(): Argument #1 ($string) must be of type string, null given
string(1172) "#0 /usr/local/apnscp/lib/modules/dns.php(571): Opcenter\Dns\Providers\Cloudflare\Module->zoneAxfr('mydomain...')
#1 /usr/local/apnscp/lib/modules/dns.php(1762): Dns_Module->get_zone_data('mydomain...')
#2 /usr/local/apnscp/lib/Module/Skeleton/Standard.php(146): Dns_Module->get_zone_information('mydomain...')
#3 /usr/local/apnscp/lib/apnscpfunction.php(991): Module\Skeleton\Standard->_invoke('get_zone_inform...', Array)
#4 /usr/local/apnscp/lib/apnscpFunctionInterceptorTrait.php(34): apnscpFunctionInterceptor->call('dns_get_zone_in...', Array)
#5 /usr/local/apnscp/lib/html/page_container.php(646): Page_Container->afiCall('dns_get_zone_in...', Array)
#6 /usr/local/apnscp/apps/dns/dns.php(143): Page_Container->__call('dns_get_zone_in...', Array)
#7 /usr/local/apnscp/apps/dns/dns.php(78): apps\dns\Page->_populateZoneCache('mydomain...')
#8 /usr/local/apnscp/lib/ContextableTrait.php(41): apps\dns\Page->__construct()
#9 /usr/local/apnscp/lib/html/page_container.php(405): Page_Container::instantiateContexted(Object(Auth_Info_User), Array)
#10 /usr/local/apnscp/public/index.php(99): Page_Container::init('\\apps\\dns\\Page')
#11 {main}"
array(2) {
  [0]=>
  array(4) {
    ["message"]=>
    string(69) "query response from elliot.ns.cloudflare.com (1.0.0.1): 172.64.33.162"
    ["severity"]=>
    int(1)
    ["caller"]=>
    string(5) "debug"
    ["bt"]=>
    NULL
  }
  [1]=>
  array(4) {
    ["message"]=>
    string(68) "query response from ziggy.ns.cloudflare.com (1.1.1.1): 172.64.34.237"
    ["severity"]=>
    int(1)
    ["caller"]=>
    string(5) "debug"
    ["bt"]=>
    NULL
  }
}
         0. Opcenter\Dns\Providers\Cloudflare\Module->zoneAxfr("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:571]
         1. Dns_Module->get_zone_data("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:1762]
         2. Dns_Module->get_zone_information("mydomain.com")
            [/usr/local/apnscp/lib/Module/Skeleton/Standard.php:146]
         3. Module\Skeleton\Standard->_invoke("get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpfunction.php:991]
         4. apnscpFunctionInterceptor->call("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpFunctionInterceptorTrait.php:34]
         5. Page_Container->afiCall("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/lib/html/page_container.php:646]
         6. Page_Container->__call("dns_get_zone_information", ["mydomain.com"])
            [/usr/local/apnscp/apps/dns/dns.php:143]
         7. apps\dns\Page->_populateZoneCache("mydomain.com")
            [/usr/local/apnscp/apps/dns/dns.php:78]
         8. apps\dns\Page->__construct()
            [/usr/local/apnscp/lib/ContextableTrait.php:41]
         9. Page_Container::instantiateContexted(Auth_Info_User, [username:"myuser", domain:"mydomain.com", level:2, site_id:6, group_id:1005, user_id:9994, id:"xxxxxxxxxxxxxxxxxxx", hotworker:929451, language:"C", ])
            [/usr/local/apnscp/lib/html/page_container.php:405]
        10. Page_Container::init("\apps\dns\Page")
            [/usr/local/apnscp/public/index.php:99]

Smells like the API token used for Cloudflare had its permissions revoked.

What does this report?

env DEBUG=1 cpcmd -d mydomain.com dns:export mydomain.com
# env DEBUG=1 cpcmd -d mydomain.com dns:export mydomain.com
DEBUG  : query response from elliot.ns.cloudflare.com (1.0.0.1): 172.64.33.162
DEBUG  : query response from ziggy.ns.cloudflare.com (1.1.1.1): 172.64.34.237
WARNING: Undefined property: stdClass::$zone_name 
[/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Module.php:404]
         0. Opcenter\Dns\Providers\Cloudflare\Module->zoneAxfr("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:571]
         1. Dns_Module->get_zone_data("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:498]
         2. Dns_Module->export("mydomain.com")
            [/usr/local/apnscp/lib/Module/Skeleton/Standard.php:146]
         3. Module\Skeleton\Standard->_invoke("export", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpfunction.php:991]
         4. apnscpFunctionInterceptor->call("dns_export", ["mydomain.com"])
            [/usr/local/apnscp/lib/CLI/cmd.php:55]
         5. CLI\__call("dns_export", ["mydomain.com"])
            [/usr/local/apnscp/lib/CLI/cmd.php:574]
         6. CLI\main()
            [/usr/local/apnscp/bin/cmd:7]
(TypeError) EXCEPTION: strlen(): Argument #1 ($string) must be of type string, null given 
[/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Module.php:404]
         0. Opcenter\Dns\Providers\Cloudflare\Module->zoneAxfr("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:571]
         1. Dns_Module->get_zone_data("mydomain.com")
            [/usr/local/apnscp/lib/modules/dns.php:498]
         2. Dns_Module->export("mydomain.com")
            [/usr/local/apnscp/lib/Module/Skeleton/Standard.php:146]
         3. Module\Skeleton\Standard->_invoke("export", ["mydomain.com"])
            [/usr/local/apnscp/lib/apnscpfunction.php:991]
         4. apnscpFunctionInterceptor->call("dns_export", ["mydomain.com"])
            [/usr/local/apnscp/lib/CLI/cmd.php:55]
         5. CLI\__call("dns_export", ["mydomain.com"])
            [/usr/local/apnscp/lib/CLI/cmd.php:574]
         6. CLI\main()
            [/usr/local/apnscp/bin/cmd:7]

I created a new API token and changed it in CP as the default DNS key. I still get the same behavior. Additionally, I tried to add the new token as the DNS key for the specific site, and I got the following error:

 Action failed
EditDomain command: /usr/local/apnscp/bin/EditDomain --fd=%d --output=json  -c 'dns,key’='xxxxxxxxxxxxxxxx' %s
Util_Process::formatDataCallProc(): EditDomain: ERROR  : Opcenter\Account\Edit::installServices(): failed verification on service `dns': Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(): CF key failed: Invalid API Token
         0. Error_Reporter::add_error("CF key failed: %s", ["Invalid API Token"])
            [/usr/local/apnscp/lib/log_wrapper.php:72]
         1. error("CF key failed: %s", "Invalid API Token")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:128]
         2. Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(null, "xxxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:39]
         3. Opcenter\Dns\Providers\Cloudflare\Validator->valid(Opcenter\Service\ConfigurationContext, "xxxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Service/Validators/Dns/Key.php:63]
         4. Opcenter\Service\Validators\Dns\Key->valid("xxxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:568]
         5. Opcenter\Service\ConfigurationContext->check("key", "xxxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:165]
         6. Opcenter\Service\ConfigurationContext->preflight()
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:736]
         7. Opcenter\SiteConfiguration->verify("dns", Opcenter\Service\ConfigurationContext)
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:655]
         8. Opcenter\SiteConfiguration->verifyAll()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:120]
         9. Opcenter\Account\Edit->installServices()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:88]
        10. Opcenter\Account\Edit->exec()
            [/usr/local/apnscp/bin/EditDomain:119]
 1 more message
 Admin_Module::edit_site(): Opcenter\Account\Edit::installServices(): failed verification on service `dns': Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(): CF key failed: Invalid API Token

[edit, more detail] hmm, I tried this with a slightly different command and got a slightly different error message. still the same token.

# EditDomain -c dns,provider=cloudflare -c dns,key=DEFAULT mydomain.com
ERROR  : Opcenter\Account\Edit::installServices(): failed verification on service `dns': Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(): CF key failed: Invalid request headers
         0. Error_Reporter::add_error("CF key failed: %s", ["Invalid request headers"])
            [/usr/local/apnscp/lib/log_wrapper.php:72]
         1. error("CF key failed: %s", "Invalid request headers")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:128]
         2. Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(null, "[key: xxxxxxxxxxxxxxxx,proxy:false]")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:39]
         3. Opcenter\Dns\Providers\Cloudflare\Validator->valid(Opcenter\Service\ConfigurationContext, "[key: xxxxxxxxxxxxxxxx,proxy:false]")
            [/usr/local/apnscp/lib/Opcenter/Service/Validators/Dns/Key.php:63]
         4. Opcenter\Service\Validators\Dns\Key->valid("[key: xxxxxxxxxxxxxxxx,proxy:false]")
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:568]
         5. Opcenter\Service\ConfigurationContext->check("key", "keyring: xxxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:165]
         6. Opcenter\Service\ConfigurationContext->preflight()
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:736]
         7. Opcenter\SiteConfiguration->verify("dns", Opcenter\Service\ConfigurationContext)
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:655]
         8. Opcenter\SiteConfiguration->verifyAll()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:120]
         9. Opcenter\Account\Edit->installServices()
            [/usr/local/apnscp/lib/Opcenter/Account/Edit.php:88]
        10. Opcenter\Account\Edit->exec()
            [/usr/local/apnscp/bin/EditDomain:119]

just as another check, I pasted the API token into the curl command suggested from cloudflare to verify it, and it reports that the “Token is valid and active"

Thanks for the bug report. Fixed in edge. “zone_name” was deprecated by December 2024 and finally removed for good.

1 Like

Hey, I am on the same boat, being unable to create a new site. I was getting the error below before switching to edge:

0. Error_Reporter::add_error("CF key failed: %s", ["Invalid request headers"])
            [/usr/local/apnscp/lib/log_wrapper.php:72]

After switching to edge and rolling the API key I am now getting:

ERROR  : Opcenter\Account\Create::installServices(): failed verification on service `dns': Opcenter\Dns\Providers\Cloudflare\Validator::keyValid(): CF key failed: Unauthorized to access requested resource
         0. Error_Reporter::add_error("CF key failed: %s", ["Unauthorized to access requested resource"])
            [/usr/local/apnscp/lib/log_wrapper.php:72]
         1. error("CF key failed: %s", "Unauthorized to access requested resource")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:128]
         2. Opcenter\Dns\Providers\Cloudflare\Validator::keyValid("example@example.com", "xxxxxxxxxxxxxxx")
            [/usr/local/apnscp/lib/Opcenter/Dns/Providers/Cloudflare/Validator.php:39]
         3. Opcenter\Dns\Providers\Cloudflare\Validator->valid(Opcenter\Service\ConfigurationContext, null)
            [/usr/local/apnscp/lib/Opcenter/Service/Validators/Dns/Key.php:63]
         4. Opcenter\Service\Validators\Dns\Key->valid(null)
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:567]
         5. Opcenter\Service\ConfigurationContext->check("key", null)
            [/usr/local/apnscp/lib/Opcenter/Service/ConfigurationContext.php:164]
         6. Opcenter\Service\ConfigurationContext->preflight()
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:729]
         7. Opcenter\SiteConfiguration->verify("dns", Opcenter\Service\ConfigurationContext)
            [/usr/local/apnscp/lib/Opcenter/SiteConfiguration.php:648]
         8. Opcenter\SiteConfiguration->verifyAll()
            [/usr/local/apnscp/lib/Opcenter/Account/Create.php:183]
         9. Opcenter\Account\Create->installServices("FILESYSTEM.created", Opcenter\Filesystem)
            [/usr/local/apnscp/lib/Event/Cardinal.php:143]
        10. Event\Contracts\Subscriber@anonymous/usr/local/apnscp/lib/Event/Cardinal.php:132$97->update("FILESYSTEM.created", Opcenter\Filesystem)
            [/usr/local/apnscp/lib/Event/Manager.php:187]
        11. Event\Manager->fire("FILESYSTEM.created", Opcenter\Filesystem)
            [/usr/local/apnscp/lib/Event/Cardinal.php:172]
        12. Event\Cardinal::fire(["FILESYSTEM", "created"], Opcenter\Filesystem)
            [/usr/local/apnscp/lib/Opcenter/Filesystem.php:68]
        13. Opcenter\Filesystem->populate()
            [/usr/local/apnscp/lib/Opcenter/Filesystem.php:46]
        14. Opcenter\Filesystem::create("site13")
            [/usr/local/apnscp/lib/Opcenter/Account/Create.php:154]
        15. Opcenter\Account\Create->exec()
            [/usr/local/apnscp/bin/AddDomain:36]
FATAL  : fatal(): failed to create account
         0. Error_Reporter::trigger_fatal("failed to create account", )
            [/usr/local/apnscp/lib/log_wrapper.php:50]
         1. fatal("failed to create account")
            [/usr/local/apnscp/lib/Opcenter/Filesystem.php:69]
         2. Opcenter\Filesystem->populate()
            [/usr/local/apnscp/lib/Opcenter/Filesystem.php:46]
         3. Opcenter\Filesystem::create("site13")
            [/usr/local/apnscp/lib/Opcenter/Account/Create.php:154]
         4. Opcenter\Account\Create->exec()
            [/usr/local/apnscp/bin/AddDomain:36]

The config is set inside the config/auth.yaml file. DNS Manager in the GUI redirects to a Internal Server error page too. We are unable to create any sites now. How can we further debug this? I posted here because the timing was just right and the errors looked similar. I also made sure Zone.Zone and Zone.DNS privileges are correctly set for the key.

Permissions must include all zones. The default is an opt-in list with permission to zero. The error message informs you of such.

Note that key and token are two distinct meanings to Cloudflare as well. Key requires email; token does not.

cf. Cloudflare DNS Provider | ApisCP Docs

Thank you for taking the time to respond on such short notice. I’ve been using Cloudflare for nearly ten years across almost a hundred domains, and I’d definitely be lost without your help. It goes to show that you can never learn too much, no matter how simple things might seem.

I also discovered that I wasn’t actually on edge after following the instructions from this topic and to my surprise apiscp was also stuck at

HEAD detached at v3.2.45.2

Everything is working fine now—no more Internal Server Errors on the DNS Manager, and I can create sites as before.

1 Like