diff options
Diffstat (limited to 'ldap/admin/src/getConfigInfo')
-rw-r--r-- | ldap/admin/src/getConfigInfo | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/ldap/admin/src/getConfigInfo b/ldap/admin/src/getConfigInfo new file mode 100644 index 00000000..5ba1d20d --- /dev/null +++ b/ldap/admin/src/getConfigInfo @@ -0,0 +1,134 @@ +#!perl +# +# BEGIN COPYRIGHT BLOCK +# Copyright 2001 Sun Microsystems, Inc. +# Portions copyright 1999, 2001-2003 Netscape Communications Corporation. +# All rights reserved. +# END COPYRIGHT BLOCK +# + +# Get some configuration information from an instance + +BEGIN { + $| = 1; + # print CGI header + print "Content-type: text/plain\n\n"; + + $isNT = -d '\\'; + $PATHSEP = $isNT ? "\\" : "/"; + # get the server root directory + $sroot = $ENV{'NETSITE_ROOT'}; + @INC = ( '.', '../../../admin/admin/bin' ); + grep { s@/@\\@g } @INC if $isNT; +} + +sub sigDieHandler { + print @_, "\n"; + print "NMC_STATUS: ", $!+0, "\n"; + exit $!; +} + +$SIG{__DIE__} = 'sigDieHandler'; + +# process the CGI input +use Cgi; + +$oldSlapdConf = $cgiVars{'oldServerRoot'} . $PATHSEP . 'slapd-' . + $cgiVars{'oldServerName'} . $PATHSEP . 'config' . $PATHSEP . + 'slapd.conf'; + +$foundLocalUser = 0; + +open(OLDSLAPDCONF, $oldSlapdConf) or + die "Error: could not open old config file $oldSlapdConf: $!"; +while ($line = <OLDSLAPDCONF>) { + chop $line; + foreach $key (keys %cgiVars) { + $param = $cgiVars{$key}; + if ($line =~ /^$param\s+/i) { + ($value = $') =~ s/^[\"]//; + # remove leading " + $value =~ s/[\"]$//; + # remove trailing " + print $key, ':', $value, "\n"; + if (lc($param) eq 'localuser') { + $foundLocalUser = 1; + } + } + } + if ($line =~ /^directory\s+/i) { $dbdir = $';} + # the user may have given us a network mounted old home directory, but in the + # old instance's config files, the root directory referred to is usually + # a local directory. For example, suppose there is an automounter map for + # hosts which maps onto /h e.g. /h/oldhost would contain all directories + # exported via NFS. Similarly, for NT, you could do \\oldhost\c to look + # at the C: drive on the old host. Or the user may have network mounted + # the old server root some other way. Anyway, we need to determine what + # the old server root was local to the original host because that is what + # will be referred to it the old config files. So, we look at the errorlog + # directive in slapd.conf and use whatever comes before the slapd-oldname + elsif ($line =~ /\werrorlog\s+(.*)slapd-$cgiVars{'oldServerName'}/i) { + $realOldDir = $1; + } + elsif ($line =~ /^security\s+/i) { + if (lc($') eq 'on') { + $security = 1; + } + } + elsif ($line =~ /^encryption-alias\s+/i) { + $encryptionalias = $'; + } +} +close(OLDSLAPDCONF); + +if (! $realOldDir) { + $realOldDir = $cgiVars{'oldServerRoot'}; +} + +# if security is enabled, see if there is a cert and key db +if ($security && $encryptionalias) { + $secDir = $cgiVars{'oldServerRoot'} . $PATHSEP . 'alias'; + opendir(SECDIR, $secDir) or + die "Error: could not open alias dir $secDir : $!"; + foreach (readdir(SECDIR)) { + if (! /[.][.]?/) { + if (/^$encryptionalias/i) { + print 'needSecPwd:true', "\n"; + last; + } + } + } + closedir(SECDIR); +} + +# the dbdir is stored as a local dir, but we may need a network dir +($networkDbDir = $dbdir) =~ s/^$realOldDir/$cgiVars{'oldServerRoot'}/ig; + +if (! $isNT && $cgiVars{'oldlocaluser'} && ! $foundLocalUser) { + # get the local user by doing a stat of the db directory + $olduid = (stat($networkDbDir))[4]; + # convert the numeric uid to string name + setpwent; + while (@ent = getpwent) { + if ($ent[2] == $olduid) { + print 'oldlocaluser:', $ent[0], "\n"; + last; + } + } + endpwent; +} + +if (! $isNT && $cgiVars{'newlocaluser'}) { + open(SSUSERS, "$sroot${PATHSEP}shared${PATHSEP}config${PATHSEP}ssusers.conf") or + die "Error: could not open $sroot${PATHSEP}shared${PATHSEP}config${PATHSEP}ssusers.conf: $!"; + while (<SSUSERS>) { + chop; + if (/^SuiteSpotUser\s+/i) { + print 'newlocaluser:', $', "\n"; + } + } + close(SSUSERS); +} + +print "NMC_STATUS: 0\n"; +exit 0; |