# -----------------------------------------------------------------------------
#
# $Id: libjail.pm,v 1.1.1.1 2001/10/26 09:36:09 assman Exp $
#
# $Log: libjail.pm,v $
# Revision 1.1.1.1  2001/10/26 09:36:09  assman
# Added support for new platforms: FreeBSD, Solaris, IRIX. Now some options
# can be selected from the Makefile script: DEBUG on/off, install path,
# install permissions, etc. The perl scripts have been rewritten so they
# support platform-specific code, so port Jail to another platform should
# be an easy task.
#
#
# -----------------------------------------------------------------------------

$JAIL_DIR= "__INSTALLDIR__/etc";
$CONFIG_FILE=$JAIL_DIR."/"."jail.conf";

# -----------------------------------------------------------------------------
#
# Initial bootstrap
# load the configuration file
#
# -----------------------------------------------------------------------------

if (-e $CONFIG_FILE) {
     require($CONFIG_FILE);
}
else  {
   die("can't load config file \"$CONFIG_FILE\".\n");
}

# -----------------------------------------------------------------------------
#
# load_file()
# a simple function for store the contents of a file in a string
#
# -----------------------------------------------------------------------------

sub load_file {
  local ($file) = @_;
  if (!-e $file) {
    $DEBUG && print("can't open file \"$file\" for read\n");
    return();
  }
  open(F,$file);
  local @elem = <F>;
  close(F);
  return(join("",@elem));
}

# -----------------------------------------------------------------------------
#
# initial_load()
# a function for locate the directory for a given arch
#
# -----------------------------------------------------------------------------

sub initial_load {
  local ($arch) = @_;
  
  local $found = 0;
  
  for $key (keys (%ARCH_DIR_LOOKUP)) {
    if ($key eq $arch) {
      $found = 1;
      last;
    }
  }
  if (!$found) {
    die("arch $arch doesn't exist.\n");
  }
  
  return($ARCH_DIR_LOOKUP{$arch});
}

# -----------------------------------------------------------------------------
#
# INITIALIZATION PHASE
# get the arch, and load the right files
# then eval them
#
# -----------------------------------------------------------------------------

$definitions = load_file($INSTALL_DIR."/lib/arch/generic/definitions");
$functions = load_file($INSTALL_DIR."/lib/arch/generic/functions");

$DEBUG && print("Definition file: $INSTALL_DIR/lib/arch/generic/definitions\n");
$DEBUG && print("Function file: $INSTALL_DIR/lib/arch/generic/functions\n");


if (!$definitions) {
 die("can't open definition file $definitions.\n");
}

if (!$functions) {
 die("can't open functions file \"$functions\".\n");
}

eval($definitions);
eval($functions);

undef $definitions;
undef $functions;

$ARCH_NAME = initial_load($ARCH);
$arch_dir = $INSTALL_DIR."/lib/arch/".$ARCH_NAME;

$DEBUG && print("Arch directory is: \"$arch_dir\".\n");

if (!-e $arch_dir) {
  die("arch directory \"$arch_dir\" doesn't exist.\n");
}

# -----------------------------------------------------------------------------
#
# load the specific arch files
#
# -----------------------------------------------------------------------------

$definitions = load_file($arch_dir."/definitions");
$functions = load_file($arch_dir."/functions");

if (!$definitions) {
  die("can't open definition file \"$definitions\".\n");
}

if (!$functions) {
  die("can't open functions file \"$functions\".\n");
}

eval($definitions);
eval($functions);

undef $definitions;
undef $functions;
undef $arch_dir;

1;


syntax highlighted by Code2HTML, v. 0.9.1