[Samba] Device ends up with multiple dns records and IP addresses

Ingo Asche foren at asche-rz.de
Wed Nov 10 19:21:03 UTC 2021

Hi Rowland,

I tried the actual script just now and it quits in syslog with exit 
status 256.

I then started the script manual with the variables used and I get this 

WARNING: The option -k|--kerberos is deprecated!
ERROR(runtime): uncaught exception - (5, 'WERR_ACCESS_DENIED')
   File "/usr/lib/python3/dist-packages/samba/netcmd/__init__.py", line 
186, in _run
     return self.run(*args, **kwargs)
   File "/usr/lib/python3/dist-packages/samba/netcmd/dns.py", line 1094, 
in run
     raise e
   File "/usr/lib/python3/dist-packages/samba/netcmd/dns.py", line 1088, 
in run
     0, server, zone, name, add_rec_buf, None)

I double checked it I all have done as written in the Wiki article and 
found no error.


Rowland Penny via samba schrieb am 10.11.2021 um 16:59:
> On Wed, 2021-11-10 at 15:06 +0000, Sebastian Arcus via samba wrote:
>> On 09/11/2021 14:29, Rowland Penny via samba wrote:
>>> On Tue, 2021-11-09 at 13:08 +0000, Sebastian Arcus via samba wrote:
>>>> I have just checked this server today, and the printer has two IP
>>>> addresses again:
>>>> # host SEC001599AB9439
>>>> SEC001599AB9439.ihs-uk.lan has address
>>>> SEC001599AB9439.ihs-uk.lan has address
>>>> There are some other hosts with multiple IP's - an iPhone has 5
>>>> IP
>>>> addresses.
>>>> I then went to test manually adding a record with two IP
>>>> addresses
>>>> to
>>>> the dns server using the dhcp-dyndns.sh script:
>>>> /etc/dhcpd.d# ./dhcp-ddns.sh add abcdef test1
>>> What OS is this running on ?
>>> I do not recognise '/etc/dhcpd.d'
>>>> However, by inserting debug statements, I discovered that the
>>>> line
>>>> above
>>> Can you supply the script line that crashes for you.
>> Ok - I might have a bit more useful information. I've added lots of
>> debug lines in the script and the source of the error messages seems
>> to
>> be two fold: if there is already an A record in the dns back-end
>> with
>> multiple IPs, and/or a PTR record with multiple hostnames, both the
>> corresponding "samba-tool dns delete ..." statements fail with those
>> errors. Then everything snowballs down the hill, as every time the
>> device gets a new IP address, the script keeps on adding more
>> multiple
>> records to the database, with no chance of recovering from there.
>> I still don't know for sure how did the multiple records happen in
>> the
>> first place. I do know however why I was still getting the error
>> after
>> deleting all the IPs in the dns back-end for this printer - it's
>> because
>> I didn't realise that there was also a PTR record with multiple
>> hostnames, as well as the A record with multiple IPs.
>> Does the above help a bit? I don't know if the script should be
>> changed
>> to recognise multiple IP's / hostnames being returned when querying
>> the
>> dns back-end - and cope with that scenario? Or maybe that should
>> just
>> never ever happen in the first place?
> OK, try upgrading the script, the latest version has this:
>      add)
>          _KERBEROS
>          count=0
>          # does host have an existing 'A' record ?
>          A_REC=$(samba-tool dns query ${Server} ${domain} ${name} A -k
> yes 2>/dev/null | grep 'A:' | awk '{print $2}')
>          if [[ -z $A_REC ]]; then
>              # no A record to delete
>              result1=0
>              samba-tool dns add ${Server} ${domain} "${name}" A ${ip} -k
> yes
>              result2="$?"
>          elif [ "$A_REC" = "${ip}" ]; then
>                # Correct A record exists, do nothing
>                logger "Correct 'A' record exists, not updating."
>                result1=0
>                result2=0
>                count=$((count+1))
>          elif [ "$A_REC" != "${ip}" ]; then
>                # Wrong A record exists
>                logger "'A' record changed, updating record."
>                samba-tool dns delete ${Server} ${domain} "${name}" A
> ${A_REC} -k yes
>                result1="$?"
>                samba-tool dns add ${Server} ${domain} "${name}" A ${ip}
> -k yes
>                result2="$?"
>          fi
> The script now checks if the record exists and then does one of three
> things:
> It adds the record if one doesn't exist
> If the record exists and it matches the supplied data, it does nothing
> If the record exists and it doesn't match the supplied data, the record
> is deleted and a new record added
> The 0.9.0 version of the script did not do this.
> Rowland

More information about the samba mailing list