#!/usr/bin/perl use DataOneLdap; use strict; use Getopt::Long(); sub usage { my $message = $_[0]; if (defined $message && length $message) { $message .= "\n" unless $message =~ /\n$/; } my $command = $0; $command =~ s#^.*/##; print STDERR ( $message, "usage: $command [--help] --id nodeId --subject\n" ); die("\n") } my $nodeid; my $subject; my $help; Getopt::Long::GetOptions( 'id=s' => \$nodeid, 'subject=s' => \$subject, 'help!' => \$help ) or usage("Invalid commmand line options."); usage() if (defined $help); usage("The identifier of the node must be specified.") unless (defined $nodeid) ; usage("The new subject of the node must be specified.") unless (defined $subject) ; my $d1Ldap = new DataOneLdap(); my $ldap = $d1Ldap->connect(); my $mesg = $ldap->search(filter=>"(cn=$nodeid)", base=>"dc=dataone,dc=org"); my @entries = $mesg->entries; foreach my $entry (@entries) { my $dn = $entry->dn(); print "DN = $dn new subject $subject\n "; $mesg = $ldap->modify($dn, replace => {'subject' => [$subject]}); $mesg->done && print "replaced entry: $subject\n" ; $mesg->code && warn "failed to replace entry: ", $mesg->error ; } $ldap->unbind;