troglobit/inadyn

Provider ipv64.net: it's not possible to use the default `check-server` set for ipv4@ipv64.net to get an update of the `A` record.

hrzlgnm opened this issue · 4 comments

The code in that the retrieves the ip

DO(http_init(client, "Checking for IP# change", strstr(provider->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4));
to be used via the default set ifconfig.me defined in
.checkip_name = "ifconfig.me",
is confused and assumes ipv6 is enforced, due to the name ipv64.net containing ipv6.

This leads to an issue, that a definition like the following one:

provider ipv4@ipv64.net { 
    username = <REDACTED>
    password = none
    hostname = <REDACTED>
}

tries to update the ipv4 record using the retrieved ipv6 address.

I'm currently using the following workaround:

provider ipv4@ipv64.net { 
    ...
    checkip-command = "/usr/bin/curl -s -4 https://ifconfig.me/ip"
}

There are more constructs like the mentioned above.

if (strstr(info->system->name, "ipv6"))

CHECK(http_init(&client, "Json query",strstr(info->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4));

CHECK(http_init(&client, "Json query",strstr(info->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4));

rc = http_init(&client, "Fetching account API key",strstr(info->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4);

rc = http_init(&client, "Sending record list query",strstr(info->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4);

if (strstr(info->system->name, "ipv6"))

return snprintf(ctx->request_buf, ctx->request_buflen,

rc = http_init(client, "Sending IP# update to DDNS server", strstr(info->system->name, "ipv6") ? TCP_FORCE_IPV6 : TCP_FORCE_IPV4);

Edit: make links to code permalinks

As proposed in #496

I'm also happy to tackle this, if i get some hints how to approach this properly.

Unfortunately I have no time to guide anyone at the moment, but I'll do my best to review PRs (provided they are small and logical change sets).

Fair enough, I'll give it a shot with checking that the provider name starts with "ipv6" instead of containing it.