# xnameArec.pl - A Perl script to update Xname.org zone records using XMLRPC. # Written by Robert G. Schaffrathuse RPC::XML; use RPC::XML::Client; use Getopt::Long; # Set some defaults my $server = 'http://www.xname.org/xmlrpc.php'; my $oldaddress = '*'; my $ttl = 600; $result = GetOptions( 'help|?' => \$help, 'u|user=s' => \$user, 'p|password=s' => \$password, 'z|zone=s' => \$zone, 'h|host=s' => \$host, 'o|oldaddress=s' => \$oldaddress, 'n|newaddress=s' => \$newaddress, 't|ttl=i' => \$ttl, 'm|methods' => \$methods, 's|server=s' => \$server ); if ($result == 1 && !$help) { if (defined($methods)) { DisplayMethods(RPC::XML::Client->new( $server )); } elsif (!defined($user) || !defined($password) || !defined($zone) || !defined($host)) { Usage(); } else { $cli = RPC::XML::Client->new( $server ); my $req = RPC::XML::struct->new( user => $user, password => $password, zone => $zone, name => $host, oldaddress => $oldaddress, newaddress => $newaddress, ttl => $ttl ); $resp = $cli->send_request( 'xname.updateArecord', $req ); if (ref($resp)) { if (${$resp->value}{'faultString'} eq "") { #For address display, ${$resp->value}{'addresses'} = HASH(0x1d9585c) print "${$resp->value}{'name'}.${$resp->value}{'zone'} has been updated.\nSerial number ${$resp->value}{'serial'}.\n"; } else { print "Error: ", ${$resp->value}{'faultString'}, " (", ${$resp->value}{'faultCode'}, ")\n"; } } } } else { Usage(); } sub Usage() { print qq( Usage: xnameArec -u|--user (REQUIRED) -p|--password (REQUIRED) -z|--zone (REQUIRED) -h|--host (REQUIRED) [-?|--help] [-o|--oldaddress (use "*" for all)] [-n|--newaddress ] [-t|--ttl ] [-s|--server ]); } sub DisplayMethods() { $cli = shift @_; my $resp = $cli->send_request('system.listMethods'); print ref $resp ? "Methods: " . join(', ', @{$resp->value}) : "Error: $resp"; } __END__