#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 2000 by Sun Microsystems, Inc.
# All rights reserved.
#
# ident "%Z%%M% %I% %E% SMI"
$PROGRAM_NAME = "make_pkg_db";
$DBM_DIR_CHARACTERIZATION = "directory for the dbm databases";
$INPUT_FILES_CHARACTERIZATION = "one or more files in /var/sadm/install/contents format";
$PKGDEFS_DIRECTORY = "package pool directory";
$Usage =
"Usage: $PROGRAM_NAME
[-ifiles <$INPUT_FILES_CHARACTERIZATION>]
[-pkgdef <$PKGDEFS_DIRECTORY>]
-dbdir <$DBM_DIR_CHARACTERIZATION>
[-h for help]\n";
$Help =
"This program initializes a set of dbm databases with information
There is one required argument:
-dbdir <dir> the $DBM_DIR_CHARACTERIZATION
\nThe optional argument -h produces this message instead of any processing.
\nThe optional argument -ifiles is used for symbolic link resolution.
\nThe optional argument -pkgdef creates the databases based upon a package \npool directory instead of /var/sadm/install/contents on the local machine.
";
#
# check for perl5 -- we use things unavailable in perl4
#
#
# process arguments
#
$PKGDefs = "";
while (@ARGV) {
exit 0;
}
} else {
exit 1;
}
}
# make sure the package pool directory exists
exit 1;
}
# Here we define the input files which will be parsed
if ($PKGDefs) {
}
}
else {
}
if (!@IFiles) {
exit 1;
}
if (!$DBDir) {
exit 1;
}
$Struct = \%struct; # here is the structure we'll store everything in
#
# now open the dbm databases we will initialize
#
}
# db for entity file types
# db for entity modes types
# db for entity packages
# db for absolute link targets
#
# go make the package names db
#
#
# read and parse each input file in contents file format
#
next;
}
}
}
# Tell the user what we are looking at UNLESS they are looking at a package
# pool. A package pool could have hundreds of entries which just creates
# a lot of useless (and confusing) output.
next if /^:/; # ignore these lines from a pkgmap
next if (/(\S+)\s+[i]\s+/);
}
else {
next if /^#/; # ignore comments
next if /^\s*$/; # ignore blanks
}
chop;
$line=$_;
}
else {
}
# if this entry was supplied by a earlier file, skip it
# don't bother complaining about directories, we know the same
# directory could exist in multiple packages
# In the case where we are going through a package pool, we
# expect that a file may reside in multiple packages. If
# that is detected, we simply add this package to the list of
# packages for that file
}
else {
# In the case where we are reading in from
# /var/sadm/install.contents, we do not expect to see any
# over-ridden files EXCEPT when the "-ifiles" option is used.
}
next;
} else {
# This is a hack. In the case of directories like /bin which
# would belong in many packages, the $PKGS hash would not
# be able to handle such a long entry. So for directories, I
# just place the first package I find. For this tool, it doesn't
# matter since this tool does not report which directories come
# from which package.
$PKGS{$Entity} = $FirstPackage[0];
}
else {
}
}
#
# put what we need from this entry line into the dbs
#
#
# now collect the possible paths for each basename
#
} else {
}
}
} # end foreach $IFile
#
# now convert the relative links into absolute ones
#
}
#
# close the dbs -- we're done
#
#===========================END OF MAIN====================================
#
# get the filename part
#
#
# pop the relative path until a relative dir shows up
#
last;
}
}
}
# NICKI - for now
# &yelp("***CANNOT RESOLVE ABSOLUTE PATH $abspath\n");
# COMMENTED OUT BY NICKI
# $base = $rellink;
# $base =~ s/.*\///; # get basename we're looking for
# @cans = @{$Struct->{"PATHS"}->{$base}}; # get all entities ...
# $numcans = $#cans + 1; # ... with this base
# &yelp(" There are $numcans entries with this basename:\n");
# foreach $can (@cans) {
# &yelp(" $can\n");
# }
# $abspath = "";
}
return $abspath;
}
sub ParseContentsEntry {
#invocation: &ParseContentsEntry($l); # $l is a line in the file
local ($l) = @_;
#
# look for b or c entries, like:
#
($l =~ /^(\S+)\s+([bc])\s+(\w+)\s+([0-9]+)\s+([0-9]+)\s+([0-7]+)\s+([a-z]+)\s+([a-z]+)\s+([A-Z].*)/)) {
#
# look for d entries, like
#
($l =~ /^(\S+)\s+([d])\s+(\w+)\s+([0-7]+)\s+([a-z]+)\s+([a-z]+)\s+([A-Z].*)/)) {
#
# look for f or e or v entries, like
#
($l =~ /^(\S+)\s+([fev])\s+(\w+)\s+([0-7]+)\s+([a-z]+)\s+([a-z]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([A-Z].*)/)) {
#
# look for l or s entries, like
#
} else {
}
}
sub ParsePkgmapEntry {
# for validation of input
$Unresolved = true;
# look for d entries, like
# 1 d root etc 775 root sys
# prepend a install root
}
else {
}
$Unresolved = false;
}
# look for e,f or v entries, like
# prepend a install root
}
else {
}
$Unresolved = false;
}
# prepend a install root
}
else {
}
$Unresolved = false;
}
}
sub ParsePrototypeEntry {
#invocation: &ParsePrototypeEntry($l); # $l is a line in the file
local ($l) = @_;
#
# look for b or c entries, like:
#
($l =~ /^(\S+)\s+([bc])\s+(\w+)\s+([0-9]+)\s+([0-9]+)\s+([0-7]+)\s+([a-z]+)\s+([a-z]+)\s+([A-Z].*)/)) {
#
# look for d entries, like
# d root etc 775 root sys
#
($l =~ /^([d])\s+(\w+)\s+(\S+)\s+([0-7]+)\s+(\w+)\s+(\w+)/)) {
#
# look for f or e or v entries, like
#
#
# look for l or s entries, like
#
} else {
}
}
sub yelp {
}
sub MakePackageNamesDB {
#invocation: &MakePackageNamesDB($PkgDir);
$str =~ s/\s*\n$//; # trim trailing ws
$str =~ s/.*=\s*//; # trim leading NAME=
} else {
}
} else {
}
} # end of loop over package directories
}