Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

216 lines (170 sloc) 4.774 kB
my $base = $ARGV[0] || '/work/interchange';
$self = {
INSTALLARCHLIB => $base,
INSTALLBIN => "$base/bin",
INSTALLDIRS => 'perl',
INSTALLMAN1DIR => "$base/doc",
INSTALLMAN3DIR => "$base/doc",
INSTALLPRIVLIB => "$base/lib",
INSTALLSCRIPT => "$base/bin",
};
my %Special;
use Config;
eval {
require 'scripts/initp.pl';
};
if(! $MV::Self ) {
$MV::Self = $self;
$Special{perlpath} = $Config{perlpath};
$Special{perlpath} .= <<EOF;
eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
if 0; # not running under some shell
EOF
$Special{perlpath} =~ s/\s+$//;
}
sub doit {
my ($key) = @_;
my $val;
if ($MV::Self->{RPMBUILDDIR} and $val = $MV::Self->{$key}) {
$val =~ s!^$MV::Self->{RPMBUILDDIR}/!/!;
return $val;
}
return $MV::Self->{$key} unless $key =~ /[a-z]/;
return $Special{$key} if defined $Special{$key};
$Config{$key};
}
DOIT: {
local ($/);
local($_) = <<'_EoP_';
#!/usr/bin/perl
##!~_~perlpath~_~
#
# Interchange restarter
#
# $Id: restart.PL,v 2.0.2.1 2002-01-24 05:07:04 jon Exp $
#
# Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA.
use strict;
BEGIN {
($Global::VendRoot = $ENV{MINIVEND_ROOT})
if defined $ENV{MINIVEND_ROOT};
$Global::VendRoot = $Global::VendRoot || '/usr/local/interchange';
# $Global::VendRoot = $Global::VendRoot || '~_~INSTALLARCHLIB~_~';
$Global::VendBin = $Global::VendBin || '/usr/local/interchange/bin';
# $Global::VendBin = $Global::VendBin || '~_~INSTALLBIN~_~';
}
### END CONFIGURATION VARIABLES
my $force;
if($ARGV[0] eq '-f') {
shift(@ARGV);
$force = ' -q ';
}
$ENV{PATH} = "/bin:/usr/bin";
$ENV{IFS} = " ";
# Untaint alphanuerics, periods, slashes, and minus signs
# for options
my $tmp;
for(@ARGV) {
m{([-./\w]+)};
$tmp = $1;
$_ = $tmp;
}
sub prompt {
my($pr) = shift || '? ';
my($def) = shift;
my $ans = '';
return $def if $force;
print $pr;
print "[$def] " if $def;
chomp($ans = <STDIN>);
$ans ? $ans : $def;
}
sub get_id {
my @files;
@files = ("$Global::VendRoot/.uid", "$Global::VendRoot/_uid");
my $uid;
for(@files) {
open(UID, "< $_") or next;
$uid = <UID>;
chomp($uid);
last;
}
return $uid;
}
my($name,$Trysu);
if ($< == 0) {
$name = get_id() || 'YOUR_INTERCHANGE_USER_NAME';
die "Interchange user ID not set in $Global::VendRoot/_uid.\n" if $name eq 'YOUR_INTERCHANGE_USER_NAME';
if(! $force and -t) {
print <<EOM;
The Interchange server should not be run as root. It should run
as a the user name you configured in when you set up the catalogs.
The name we think should run it is: $name
If you are starting the server from /etc/rc.local or another
startup file, you can use this:
su -f -c $Global::VendBin/restart $name
or if that fails:
su $name <<EOF
$Global::VendBin/restart
EOF
EOM
my $ask = prompt("Do you want me to start it as '$name' now? ", 'y');
exit 2 unless $ask =~ /^\s*y/i;
$Trysu = 1;
} else {
$Trysu = 1;
}
}
if(defined $Trysu) {
if($^O =~ /bsd|solaris|irix/i) {
exec <<EndOfExec or die "Couldn't exec: $!\n";
su $name <<EOF
$Global::VendBin/interchange $force -r
EOF
EndOfExec
} else {
exec qq{su -f -c "$Global::VendBin/interchange $force -r" $name};
}
} else {
exec qq{$Global::VendBin/interchange $force -r};
}
=head1 NAME
restart -- call bin/interchange C<->r with possible su
=head1 VERSION
1.0
=head1 SYNOPSIS
restart [-f]
=head1 DESCRIPTION
The C<restart> script just tries to execute C<interchange> C<-r> with the proper permissions. If
the user is "root", a prompt will be made to see if you want to start as the guessed
user ID. (This is the contents of the $Global::VendRoot/_uid file.)
=head1 OPTIONS
The C<-f> flag prevents the prompt for superuser and forces quiet mode; this is how you might call Interchange from
a system startup script.
=head1 SEE ALSO
interchange(1), http://interchange.redhat.com/
=head1 AUTHOR
Mike Heins, <mheins@redhat.com>
_EoP_
s{.*\n(#(.*)~_~(\w+)~_~(.*))}{$2 . doit($3) . "$4\n$1"}eg;
my $file = $0;
$file =~ s/\.PL$//;
open(OUT, ">$file")
or die "Create $file: $!\n";
print OUT $_;
}
Jump to Line
Something went wrong with that request. Please try again.