=head1 ipnr_reg

Diese Funktion liest zu einem IP-Bereich den eingetragenen Registrar,
und den Default-Admin+TechC.

Sie liefert 1, wenn alle gewünschten Werte gefunden wurden, ansonsten 0.

Es werden nur übergeordnete Domains berücksichtigt.

Parameter:

=over 4

=item IP-DatensatzID oder -String

=item Registrar

=item Personen-ID des Besitzers, Admin-C, Tech-C

=back

Bis auf den ersten Wert werden alle Parameter implizit als Referenz
übergeben und automatisch mit den entsprechenden Werten gefüllt.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn qquote);
use Fehler qw(warnung);
use Dbase::IP;

sub ipnr_reg($;\$\$\$\$) {
	my($ipnr,$nic,$owner,$adminc,$techc) = @_;
	my($kunde,$ni,$ow,$ad,$te);

	# s. RT#354365:
	defined $_->[1] && !ref $_->[1]
	  and warnung( "ipnr_reg(): $_->[0] ist keine Referenz." )
	  for [ NIC      => $nic    ],
	      [ Owner    => $owner  ],
	      ['Admin-C' => $adminc ],
	      ['Tech-C'  => $techc  ];

	if($ipnr =~ /^\d+$/) {
		my($bits);
		($ipnr,$bits,$ni,$kunde,$ow,$ad,$te) = DoFn("select ip6,bits,nic,kunde,owner,adminc,techc from ipkunde where id = $ipnr");
		return undef unless defined $bits;
		$ipnr = Dbase::IP->new_db($ipnr,$bits);
		$$nic = $ni if ref $nic and not $$nic;
		$$owner = $ow if ref $owner and not $$owner;
		$$adminc = $ad if ref $adminc and not $$adminc;
		$$techc = $te if ref $techc and not $$techc;
	} elsif(not ref $ipnr) {
		$ipnr = Dbase::IP->new($ipnr);
	}

	while(1) {
		last if (not ref $nic or $$nic) and
				(not ref $techc or $$techc);
		my($ni,$te) = DoFn("select nic,techc from domreg where domain = ${\qquote($ipnr->str)}");
		$$nic ||= $ni if ref $nic;
		$$techc ||= $te if ref $techc;
		last if $ipnr->db_bits == $ipnr->bits;
		$ipnr = $ipnr->bitmask($ipnr->db_bits+1,1);
	}

	$$owner = DoFn("select hauptperson from kunde where id=$kunde")
		if ref $owner and not $$owner;
	$$adminc = DoFn("select adminc from kunde where id=$kunde")
		if ref $adminc and not $$adminc;
	## techc: entfernt

	1;
}
1;
