summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/updatedsgw
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/admin/src/updatedsgw')
-rwxr-xr-xldap/admin/src/updatedsgw331
1 files changed, 331 insertions, 0 deletions
diff --git a/ldap/admin/src/updatedsgw b/ldap/admin/src/updatedsgw
new file mode 100755
index 00000000..e09c59ac
--- /dev/null
+++ b/ldap/admin/src/updatedsgw
@@ -0,0 +1,331 @@
+#!perl
+#
+# BEGIN COPYRIGHT BLOCK
+# Copyright 2001 Sun Microsystems, Inc.
+# Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
+# All rights reserved.
+# END COPYRIGHT BLOCK
+#
+
+$nshome = $ENV{'NETSITE_ROOT'};
+
+# If there is no nshome, then assume that we're running
+# as a commandline script.
+if (!$nshome ) {
+ $script_mode = 1;
+
+# get the commandline options
+ if (!getopts('h:i:d:e:s:t:n:') || !$opt_n || !$opt_h ) {
+ print "usage: " . $0 . " -n nshome -h current_slapd_host:current_slapd_port [options]\n";
+ print "\nrequired:\n";
+ print " -n directory\tthe directory where 7.0 is installed (NS-HOME)\n";
+ print " -h host[:port]\tthe current host and port of the directory server\n";
+ print " \tto which the gateway connects.\n";
+ print "\noptions:\n";
+ print " -i host[:port]\tthe new host and port of the directory server\n";
+ print " -s suffix\t\tthe old suffix of the directory server\n";
+ print " -t suffix\t\tthe new ESCAPED suffix of the directory server\n";
+ print " -d dirmgrdn\t\tthe old manager dn of the directory server\n";
+ print " -e dirmgrdn\t\tthe new manager dn of the directory server\n";
+ print "\nexample:\n " . $0 . " -n /home/servers/ds70/ -h gargoyle:1974 -i brooklyn -s \"dc=example,dc=com\" -t \"o%3Dmcom.com\" -d \"cn=directory manager\" -e \"cn=directory guru\"\n";
+
+ exit;
+ }
+
+ # Parse the commandline options
+ handle_script_input();
+
+} else {
+# output cgi header
+ print "Content-type: text/plain\n\n";
+
+# print "Done\n";
+# parse the input
+ while ( <> ) {
+ &parse_input( $_ );
+ }
+
+ if ( !$vars{'old_host'}) {
+ rpt_err( -13, "host");
+# -13 = null parameter.
+# print "Invalid input for DSGW changer CGI\n\n";
+ exit;
+ }
+
+# print "$nshome $vars{'old_host'} $vars{'old_port'}\n";
+}
+
+# setup the path separator
+$isNT = -d '\\';
+$PS = $isNT ? "\\" : "/";
+
+$contextdir = "$nshome"."$PS"."dsgw"."$PS"."context";
+
+#make sure that the target directory exists
+if (! -e "$contextdir") {
+ rpt_err( -16 ,"$contextdir");
+# -16 = not a directory
+# print "$contextdir does not exist\n";
+ exit;
+}
+
+
+# cd into NS-HOME/dsgw/context directory
+chdir "$contextdir" or die "Unable to cd to $contextdir: $!\n";
+
+# read the files
+ opendir DSGW_CONTEXT, "." or die "$!";
+ @dsgwconfs = grep !/^\.\.?$/, readdir DSGW_CONTEXT;
+ closedir DSGW_CONTEXT;
+
+
+# unescape the new and old suffixes
+if ($vars{'old_suffix'} && $vars{'new_suffix'}) {
+ $escaped_suffix = $vars{'new_suffix'};
+ $vars{'new_suffix'} =~ s/%(\w\w)/chr(hex($1))/eg;
+ $unescaped_suffix = $vars{'new_suffix'};
+# print "Normal new suffix: $unescaped_suffix\n";
+# print "Escaped new suffix: $escaped_suffix\n";
+ $unescaped_oldsuffix = $vars{'old_suffix'};
+ $unescaped_oldsuffix =~ s/%(\w\w)/chr(hex($1))/eg;
+}
+
+#unescape the digmrs
+if ($vars{'new_dirmgr'}){
+ $vars{'new_dirmgr'} =~ s/%(\w\w)/chr(hex($1))/eg;
+}
+
+if ($vars{'old_dirmgr'}){
+ $vars{'old_dirmgr'} =~ s/%(\w\w)/chr(hex($1))/eg;
+}
+
+
+ #
+ $changed = "";
+ foreach $file (@dsgwconfs){
+
+# print "working on $file\n";
+
+ # If it's not a .conf file, skip it.
+ if ( $file !~ m/.*?\.conf$/ ) {
+# print "skipping $file\n\n\n\n";
+ next;
+ }
+
+ $relevant_conf = 0;
+ $relevant_suffix = 0;
+
+ # open the old file
+ open(OLDFILE, "$file") or die "Cannot read $file. $!\n"; #
+
+ # Need to test to see if this conf file has a baseurl that
+ # matches the old host and port
+ for ($line=<OLDFILE>; $line ; $line=<OLDFILE>) { #
+
+ # If we find the matching baseurl, then set a flag and break out of the loop.
+ if ($line =~ m:^baseurl\s*("){0,1}\s*ldap(s){0,1}\://$vars{'old_host'}(\:$vars{'old_port'}){0,1}/:) { #")
+ # Also check for a matching suffix.
+ if ($vars{'old_suffix'} && $vars{'new_suffix'}) {
+ @baseurl = split("/", $line);
+ $curr_suff = $baseurl[3];
+
+ # Get rid of any double quotes.
+ @baseurl = split("\"", $curr_suff);
+ $curr_suff = $baseurl[0];
+
+ $unescaped_currsuffix = $curr_suff;
+ $unescaped_currsuffix =~ s/%(\w\w)/chr(hex($1))/eg;
+
+# print "curr Suffix: $curr_suff\n";
+# print "old Suffix: $vars{'old_suffix'}\n";
+# print "unescaped curr Suffix: $unescaped_currsuffix\n";
+# print "unescaped old Suffix: $unescaped_oldsuffix\n";
+
+ if ($unescaped_currsuffix eq $unescaped_oldsuffix) {
+ $relevant_suffix = 1;
+# print "suffix match for $file\n";
+ }
+
+ }
+ # set a flag
+ $relevant_conf = 1;
+# print "host:port match for $file\n";
+ last;
+ }
+
+
+ }
+
+ # If there was no match, then go on to the next file.
+ if (! $relevant_conf) {
+ close(OLDFILE);
+# print "no match for $file\n";
+ next;
+ }
+
+ # Else, there is a match start over at the beginning of the file
+ seek OLDFILE, 0, 0;
+ if ($changed eq "") {
+ $changed = $file;
+ }
+
+ # open the new file
+ open(NEWFILE, ">"."tmpcp_"."$file"."1") or die "Cannot write $contextdir$PStmpcp_$file1. $!\n";
+
+ # Go through each line, replacing the relevant information
+ for ($line=<OLDFILE>; $line ; $line=<OLDFILE>) { #
+
+ # If there is a new host
+ if ($vars{'new_host'}) {
+ $line =~ s:^baseurl\s*("){0,1}\s*ldap(s){0,1}\://.*?(\:\d*){0,1}/:baseurl\t$1ldap$2\://$vars{'new_host'}$3/:og; #")
+# print "new host for $file\n";
+
+ }
+
+ # a new port
+ if ($vars{'new_port'}) {
+ $line =~ s:^baseurl\s*("){0,1}\s*ldap(s){0,1}\://(.*?)(\:\d*){0,1}/:baseurl\t$1ldap$2\://$3\:$vars{'new_port'}/:og; #")
+# print "new port for $file\n";
+ }
+
+ # new dirmgr
+ if ($vars{'new_dirmgr'} && $vars{'old_dirmgr'}) {
+ $line =~ s:(?i)^dirmgr\s*("){0,1}$vars{'old_dirmgr'}("){0,1}:dirmgr\t"$vars{'new_dirmgr'}":g;
+# print "new dirmgr for $file\n";
+ }
+
+ # new suffix
+ if ($relevant_suffix) {
+ $line =~ s:(^baseurl\s*("){0,1}\s*ldap(s){0,1}\://.*?(\:\d*){0,1}/)((.*?("))|(.*?)):$1$escaped_suffix$7:og; #
+ $line =~ s:^location-suffix.*:location-suffix\t"$unescaped_suffix":og;
+# print "new suffix for $file\n";
+ }
+
+
+ print NEWFILE $line;
+
+ }
+ #
+ close(OLDFILE);
+ close(NEWFILE);
+
+ rename "tmpcp_" . "$file"."1", "$file";
+
+ }
+rpt_err(0, $changed);
+
+
+sub parse_input
+{
+ local( $line ) = @_;
+ local($var, $value, $assign );
+
+
+ foreach $assign ( split( /&/, $line ) ) {
+ ( $var, $value ) = split( /=/, $assign );
+ $value =~ s/\+/ /g;
+ $value =~ s/ /%20/g;
+# $value =~ s/%(\w\w)/chr(hex($1))/eg;
+ $var =~ s/\+/ /g;
+# $var =~ s/%(\w\w)/chr(hex($1))/eg;
+
+
+ $vars{$var} = $value;
+ }
+}
+
+
+sub handle_script_input
+{
+
+ if ($opt_h) {
+ @temp_array = split(":", $opt_h);
+
+ $vars{'old_host'} = $temp_array[0];
+ $vars{'old_port'} = $temp_array[1];
+
+# print "host: $vars{'old_port'}\n";
+# print "port: $vars{'old_host'}\n";
+ }
+
+ if ($opt_i) {
+ @temp_array = split(":", $opt_i);
+
+ $vars{'new_host'} = $temp_array[0];
+ $vars{'new_port'} = $temp_array[1];
+
+# print " $vars{'new_port'}\n";
+# print " $vars{'new_host'}\n";
+ }
+ if ($opt_d) {
+ $vars{'old_dirmgr'} = $opt_d;
+ }
+ if ($opt_e) {
+ $vars{'new_dirmgr'} = $opt_e;
+ }
+ if ($opt_s) {
+ $vars{'old_suffix'} = $opt_s;
+ }
+ if ($opt_t) {
+ $vars{'new_suffix'} = $opt_t;
+ }
+ if ($opt_n) {
+ $nshome = $opt_n;
+ }
+
+}
+
+
+sub rpt_err
+{
+ my $code = shift;
+ my $err_string = shift;
+
+ print "NMC_ErrInfo: " . "$err_string" . "\n";
+ print "NMC_STATUS: " . "$code"."\n";
+
+}
+
+sub getopts {
+ local($argumentative) = @_;
+ local(@args,$_,$first,$rest);
+ local($errs) = 0;
+ local($[) = 0;
+
+ @args = split( / */, $argumentative );
+ while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
+ ($first,$rest) = ($1,$2);
+ $pos = index($argumentative,$first);
+ if($pos >= $[) {
+ if($args[$pos+1] eq ':') {
+ shift(@ARGV);
+ if($rest eq '') {
+ ++$errs unless @ARGV;
+ $rest = shift(@ARGV);
+ }
+ eval "\$opt_$first = \$rest;";
+ }
+ else {
+ eval "\$opt_$first = 1";
+ if($rest eq '') {
+ shift(@ARGV);
+ }
+ else {
+ $ARGV[0] = "-$rest";
+ }
+ }
+ }
+ else {
+ print STDERR "Unknown option: $first\n";
+ ++$errs;
+ if($rest ne '') {
+ $ARGV[0] = "-$rest";
+ }
+ else {
+ shift(@ARGV);
+ }
+ }
+ }
+ $errs == 0;
+}
+