]> andersk Git - gssapi-openssh.git/blobdiff - setup/setup-openssh.pl
o Initial commit of script that creates GPT source package out of the
[gssapi-openssh.git] / setup / setup-openssh.pl
index 3f5289b773535de4e33f217279b4cfed80192484..a58db00e947f8fe664700711a00ee3664db3af5f 100644 (file)
@@ -29,6 +29,18 @@ if (!defined($gpath))
     die "GLOBUS_LOCATION needs to be set before running this script"
 }
 
+#
+# modify the ld library path for when we call ssh executables
+#
+
+$oldldpath = $ENV{LD_LIBRARY_PATH};
+$newldpath = "$gpath/lib";
+if (length($oldldpath) > 0)
+{
+    $newldpath .= ":$oldldpath";
+}
+$ENV{LD_LIBRARY_PATH} = "$newldpath";
+
 #
 # i'm including this because other perl scripts in the gpt setup directories
 # do so
@@ -55,8 +67,10 @@ my $myname = "setup-openssh.pl";
 $prefix = ${globusdir};
 $exec_prefix = "${prefix}";
 $bindir = "${exec_prefix}/bin";
+$sbindir = "${exec_prefix}/sbin";
 $sysconfdir = "$prefix/etc/ssh";
 $localsshdir = "/etc/ssh";
+$setupdir = "$prefix/setup/gsi_openssh_setup";
 
 my $keyfiles = {
                  "dsa" => "ssh_host_dsa_key",
@@ -193,8 +207,9 @@ sub determineKeys
 sub runKeyGen
 {
     my($gen_keys) = @_;
+    my $keygen = "$bindir/ssh-keygen";
 
-    if (@$gen_keys)
+    if (@$gen_keys && -x $keygen)
     {
         print "Generating ssh host keys...\n";
 
@@ -210,40 +225,49 @@ sub runKeyGen
     return 0;
 }
 
+### fixpaths( )
+#
+# this subroutine 'edits' the paths in sshd_config to suit them to the current environment
+# in which the setup script is being run.
+#
+
 sub fixpaths
 {
-    my $g, $h;
+    my($fileInput, $fileOutput);
+    my($mode, $uid, $gid);
+    my($line, $newline);
 
-    print "Fixing sftp-server path in sshd_config...\n";
+    print "Fixing paths in sshd_config...\n";
 
-    $f = "$gpath/etc/ssh/sshd_config";
-    $g = "$f.tmp";
+    $fileInput = "$setupdir/sshd_config.in";
+    $fileOutput = "$sysconfdir/sshd_config";
+
+    if ( ! -f "$fileInput" )
+    {
+        printf("Cannot find $fileInput!\n");
+        die();
+    }
 
-    if ( ! -f "$f" )
+    if ( -e "$fileOutput" )
     {
-        die("Cannot find $f!");
+        printf("$fileOutput already exists!\n");
+        die();
     }
 
     #
     # Grab the current mode/uid/gid for use later
     #
 
-    $mode = (stat($f))[2];
-    $uid = (stat($f))[4];
-    $gid = (stat($f))[5];
+    $mode = (stat($fileInput))[2];
+    $uid = (stat($fileInput))[4];
+    $gid = (stat($fileInput))[5];
 
     #
-    # Move $f into a .tmp file for the translation step
+    # Open the files for reading and writing, and loop over the input's contents
     #
 
-    $result = system("mv $f $g 2>&1");
-    if ($result or $?)
-    {
-        die "ERROR: Unable to execute command: $!\n";
-    }
-
-    open(IN, "<$g") || die ("$0: input file $g missing!\n");
-    open(OUT, ">$f") || die ("$0: unable to open output file $f!\n");
+    open(IN, "<$fileInput") || die ("$0: input file $fileInput missing!\n");
+    open(OUT, ">$fileOutput") || die ("$0: unable to open output file $fileOutput!\n");
 
     while (<IN>)
     {
@@ -251,55 +275,72 @@ sub fixpaths
         # sorry for the whacky regex, but i need to verify a whole line
         #
 
-        if ( /^\s*Subsystem\s+sftp\s+\S+\s*$/ )
+        $line = $_;
+        if ( $line =~ /^\s*Subsystem\s+sftp\s+\S+\s*$/ )
+        {
+            $newline = "Subsystem\tsftp\t$gpath/libexec/sftp-server\n";
+            $newline =~ s:/+:/:g;
+        }
+        elsif ( $line =~ /^\s*PidFile.*$/ )
         {
-            $_ = "Subsystem\tsftp\t$gpath/libexec/sftp-server\n";
-            $_ =~ s:/+:/:g;
+            $newline = "PidFile\t$gpath/var/sshd.pid\n";
+            $newline =~ s:/+:/:g;
         }
-        print OUT "$_";
+        else
+        {
+            $newline = $line;
+        }
+
+        print OUT "$newline";
     } # while <IN>
 
     close(OUT);
     close(IN);
 
-    #
-    # Remove the old .tmp file
-    #
-
-    $result = system("rm $g 2>&1");
-
-    if ($result or $?)
-    {
-        die "ERROR: Unable to execute command: $!\n";
-    }
-
     #
     # An attempt to revert the new file back to the original file's
     # mode/uid/gid
     #
 
-    chmod($mode, $f);
-    chown($uid, $gid, $f);
+    chmod($mode, $fileOutput);
+    chown($uid, $gid, $fileOutput);
 
     return 0;
 }
 
+### copyConfigFiles( )
+#
+# subroutine that copies some extra config files to their proper location in
+# $GLOBUS_LOCATION/etc/ssh.
+#
+
+sub copyConfigFiles
+{
+    print "Copying ssh_config and moduli to their proper location...\n";
+
+    action("cp $setupdir/ssh_config $sysconfdir/ssh_config");
+    action("cp $setupdir/moduli $sysconfdir/moduli");
+}
+
 sub alterFileGlobusLocation
 {
-    my ($file) = @_;
+    my ($in, $out) = @_;
 
-    $data = readFile($file);
-    $data =~ s|\@GSI_OPENSSH_GLOBUS_LOCATION\@|$gpath|g;
-    writeFile($file, $data);
+    if ( -r $in )
+    {
+        if ( ( -w $out ) || ( ! -e $out ) )
+        {
+            $data = readFile($in);
+            $data =~ s|\@GLOBUS_LOCATION\@|$gpath|g;
+            writeFile($out, $data);
+            action("chmod 755 $out");
+        }
+    }
 }
 
 sub alterFiles
 {
-    my (@files);
-
-    @files = (
-        "$gosharedir/contrib/caldera/sshd.init",
-             );
+    alterFileGlobusLocation("$setupdir/SXXsshd.in", "$sbindir/SXXsshd");
 }
 
 ### readFile( $filename )
@@ -366,7 +407,6 @@ print "them for you.\n";
 print "\n";
 
 $response = query_boolean("Do you wish to continue with the setup package?","y");
-
 if ($response eq "n")
 {
     print "\n";
@@ -375,17 +415,19 @@ if ($response eq "n")
     exit 0;
 }
 
+print "\n";
+
 $keyhash = determineKeys();
 runKeyGen($keyhash->{gen});
 copyKeyFiles($keyhash->{copy});
 fixpaths();
+copyConfigFiles();
+alterFiles();
 
 my $metadata = new Grid::GPT::Setup(package_name => "gsi_openssh_setup");
 
 $metadata->finish();
 
-print "---------------------------------------------------------------------\n";
-print "$myname: Finished configuring package 'gsi_openssh'.\n";
 print "\n";
 print "Additional Notes:\n";
 print "\n";
@@ -397,13 +439,15 @@ print "\n";
 print "    Remember to keep this variable set (correctly) when you want to\n";
 print "    use the executables that came with this package.\n";
 print "\n";
-print "  o You may need to set LD_LIBRARY_PATH to point to the location in\n";
-print "    which your globus libraries reside.  For example:\n";
+print "    After that you may run, e.g.:\n";
+print "\n";
+print "    \t\$ . \$GLOBUS_LOCATION/etc/globus-user-env.sh\n";
 print "\n";
-print "    \t\$ LD_LIBRARY_PATH=\"$gpath/lib:\$LD_LIBRARY_PATH\"; \\\n";
-print "    \t     export LD_LIBRARY_PATH\n";
+print "    to prepare your environment for running the gsi_openssh\n";
+print "    executables.\n";
 print "\n";
 print "---------------------------------------------------------------------\n";
+print "$myname: Finished configuring package 'gsi_openssh'.\n";
 
 #
 # Just need a minimal action() subroutine for now..
@@ -415,7 +459,7 @@ sub action
 
     printf "$command\n";
 
-    my $result = system("$command 2>&1");
+    my $result = system("LD_LIBRARY_PATH=\"$gpath/lib:\$LD_LIBRARY_PATH\"; $command 2>&1");
 
     if (($result or $?) and $command !~ m!patch!)
     {
This page took 0.0539500000000001 seconds and 4 git commands to generate.