#!/bin/bash

#
#
# $Header: /cvsroot/opencryptoki/opencryptoki/usr/sbin/pkcs_slot/pkcs_slot.in,v 1.4 2006/04/17 18:23:06 danielhjones Exp $
#


#
#             Common Public License Version 0.5

#             THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF
#             THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE,
#             REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES
#             RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
#
#             1. DEFINITIONS
#
#             "Contribution" means: 
#                   a) in the case of the initial Contributor, the
#                   initial code and documentation distributed under
#                   this Agreement, and 
#
#                   b) in the case of each subsequent Contributor:
#                   i) changes to the Program, and
#                   ii) additions to the Program;
#
#                   where such changes and/or additions to the Program
#                   originate from and are distributed by that
#                   particular Contributor. A Contribution 'originates'
#                   from a Contributor if it was added to the Program
#                   by such Contributor itself or anyone acting on such
#                   Contributor's behalf. Contributions do not include
#                   additions to the Program which: (i) are separate
#                   modules of software distributed in conjunction with
#                   the Program under their own license agreement, and
#                   (ii) are not derivative works of the Program.
#
#
#             "Contributor" means any person or entity that distributes
#             the Program.
#
#             "Licensed Patents " mean patent claims licensable by a
#             Contributor which are necessarily infringed by the use or
#             sale of its Contribution alone or when combined with the
#             Program. 
#
#             "Program" means the Contributions distributed in
#             accordance with this Agreement.
#
#             "Recipient" means anyone who receives the Program under
#             this Agreement, including all Contributors.
#
#             2. GRANT OF RIGHTS
#
#                   a) Subject to the terms of this Agreement, each
#                   Contributor hereby grants Recipient a
#                   non-exclusive, worldwide, royalty-free copyright
#                   license to reproduce, prepare derivative works of,
#                   publicly display, publicly perform, distribute and
#                   sublicense the Contribution of such Contributor, if
#                   any, and such derivative works, in source code and
#                   object code form.
#
#                   b) Subject to the terms of this Agreement, each
#                   Contributor hereby grants Recipient a
#                   non-exclusive, worldwide, royalty-free patent
#                   license under Licensed Patents to make, use, sell,
#                   offer to sell, import and otherwise transfer the
#                   Contribution of such Contributor, if any, in source
#                   code and object code form. This patent license
#                   shall apply to the combination of the Contribution
#                   and the Program if, at the time the Contribution is
#                   added by the Contributor, such addition of the
#                   Contribution causes such combination to be covered
#                   by the Licensed Patents. The patent license shall
#                   not apply to any other combinations which include
#                   the Contribution. No hardware per se is licensed
#                   hereunder.
#
#                   c) Recipient understands that although each
##                   Contributor grants the licenses to its
#                   Contributions set forth herein, no assurances are
#                   provided by any Contributor that the Program does
#                   not infringe the patent or other intellectual
#                   property rights of any other entity. Each
#                   Contributor disclaims any liability to Recipient
#                   for claims brought by any other entity based on
#                   infringement of intellectual property rights or
#                   otherwise. As a condition to exercising the rights
#                   and licenses granted hereunder, each Recipient
#                   hereby assumes sole responsibility to secure any
#                   other intellectual property rights needed, if any.
#
#                   For example, if a third party patent license is
#                   required to allow Recipient to distribute the
#                   Program, it is Recipient's responsibility to
#                   acquire that license before distributing the
#                   Program.
#
#                   d) Each Contributor represents that to its
#                   knowledge it has sufficient copyright rights in its
#                   Contribution, if any, to grant the copyright
#                   license set forth in this Agreement.
#
#             3. REQUIREMENTS
#
#             A Contributor may choose to distribute the Program in
#             object code form under its own license agreement, provided
#             that:
#                   a) it complies with the terms and conditions of
#                   this Agreement; and
#
#                   b) its license agreement:
#                   i) effectively disclaims on behalf of all
#                   Contributors all warranties and conditions, express
#                   and implied, including warranties or conditions of
#                   title and non-infringement, and implied warranties
#                   or conditions of merchantability and fitness for a
#                   particular purpose;
#
#                   ii) effectively excludes on behalf of all
#                   Contributors all liability for damages, including
#                   direct, indirect, special, incidental and
#                   consequential damages, such as lost profits;
#
#                   iii) states that any provisions which differ from
#                   this Agreement are offered by that Contributor
#                   alone and not by any other party; and
#
#                   iv) states that source code for the Program is
#                   available from such Contributor, and informs
#                   licensees how to obtain it in a reasonable manner
#                   on or through a medium customarily used for
#                   software exchange.
#
#             When the Program is made available in source code form:
#                   a) it must be made available under this Agreement;
#                   and
#                   b) a copy of this Agreement must be included with
#                   each copy of the Program. 
#
#             Contributors may not remove or alter any copyright notices
#             contained within the Program.
#
#             Each Contributor must identify itself as the originator of
#             its Contribution, if any, in a manner that reasonably
#             allows subsequent Recipients to identify the originator of
#             the Contribution. 
#
#
#             4. COMMERCIAL DISTRIBUTION
#
#             Commercial distributors of software may accept certain
#             responsibilities with respect to end users, business
#             partners and the like. While this license is intended to
#             facilitate the commercial use of the Program, the
#             Contributor who includes the Program in a commercial
#             product offering should do so in a manner which does not
#             create potential liability for other Contributors.
#             Therefore, if a Contributor includes the Program in a
#             commercial product offering, such Contributor ("Commercial
#             Contributor") hereby agrees to defend and indemnify every
#             other Contributor ("Indemnified Contributor") against any
#             losses, damages and costs (collectively "Losses") arising
#             from claims, lawsuits and other legal actions brought by a
#             third party against the Indemnified Contributor to the
#             extent caused by the acts or omissions of such Commercial
#             Contributor in connection with its distribution of the
#             Program in a commercial product offering. The obligations
#             in this section do not apply to any claims or Losses
#             relating to any actual or alleged intellectual property
#             infringement. In order to qualify, an Indemnified
#             Contributor must: a) promptly notify the Commercial
#             Contributor in writing of such claim, and b) allow the
#             Commercial Contributor to control, and cooperate with the
#             Commercial Contributor in, the defense and any related
#             settlement negotiations. The Indemnified Contributor may
#             participate in any such claim at its own expense.
#
#
#             For example, a Contributor might include the Program in a
#             commercial product offering, Product X. That Contributor
#             is then a Commercial Contributor. If that Commercial
#             Contributor then makes performance claims, or offers
#             warranties related to Product X, those performance claims
#             and warranties are such Commercial Contributor's
#             responsibility alone. Under this section, the Commercial
#             Contributor would have to defend claims against the other
#             Contributors related to those performance claims and
#             warranties, and if a court requires any other Contributor
#             to pay any damages as a result, the Commercial Contributor
#             must pay those damages.
#
#
#             5. NO WARRANTY
#
#             EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE
#             PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
#             WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
#             IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
#             CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
#             FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
#             responsible for determining the appropriateness of using
#             and distributing the Program and assumes all risks
#             associated with its exercise of rights under this
#             Agreement, including but not limited to the risks and
#             costs of program errors, compliance with applicable laws,
#             damage to or loss of data, programs or equipment, and
#             unavailability or interruption of operations. 
#
#             6. DISCLAIMER OF LIABILITY
#             EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER
#             RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY
#             FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
#             OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
#             LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
#             LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#             (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
#             OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE
#             OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
#             POSSIBILITY OF SUCH DAMAGES.
#
#             7. GENERAL
#
#             If any provision of this Agreement is invalid or
#             unenforceable under applicable law, it shall not affect
#             the validity or enforceability of the remainder of the
#             terms of this Agreement, and without further action by the
#             parties hereto, such provision shall be reformed to the
#             minimum extent necessary to make such provision valid and
#             enforceable.
#
#
#             If Recipient institutes patent litigation against a
#             Contributor with respect to a patent applicable to
#             software (including a cross-claim or counterclaim in a
#             lawsuit), then any patent licenses granted by that
#             Contributor to such Recipient under this Agreement shall
#             terminate as of the date such litigation is filed. In
#             addition, If Recipient institutes patent litigation
#             against any entity (including a cross-claim or
#             counterclaim in a lawsuit) alleging that the Program
#             itself (excluding combinations of the Program with other
#             software or hardware) infringes such Recipient's
#             patent(s), then such Recipient's rights granted under
#             Section 2(b) shall terminate as of the date such
#             litigation is filed.
#
#             All Recipient's rights under this Agreement shall
#             terminate if it fails to comply with any of the material
#             terms or conditions of this Agreement and does not cure
#             such failure in a reasonable period of time after becoming
#             aware of such noncompliance. If all Recipient's rights
#             under this Agreement terminate, Recipient agrees to cease
#             use and distribution of the Program as soon as reasonably
#             practicable. However, Recipient's obligations under this
#             Agreement and any licenses granted by Recipient relating
#             to the Program shall continue and survive. 
#
#             Everyone is permitted to copy and distribute copies of
#             this Agreement, but in order to avoid inconsistency the
#             Agreement is copyrighted and may only be modified in the
#             following manner. The Agreement Steward reserves the right
#             to publish new versions (including revisions) of this
#             Agreement from time to time. No one other than the
#             Agreement Steward has the right to modify this Agreement.
#
#             IBM is the initial Agreement Steward. IBM may assign the
#             responsibility to serve as the Agreement Steward to a
#             suitable separate entity. Each new version of the
#             Agreement will be given a distinguishing version number.
#             The Program (including Contributions) may always be
#             distributed subject to the version of the Agreement under
#             which it was received. In addition, after a new version of
#             the Agreement is published, Contributor may elect to
#             distribute the Program (including its Contributions) under
#             the new version. Except as expressly stated in Sections
#             2(a) and 2(b) above, Recipient receives no rights or
#             licenses to the intellectual property of any Contributor
#             under this Agreement, whether expressly, by implication,
#             estoppel or otherwise. All rights in the Program not
#             expressly granted under this Agreement are reserved.
#
#
#             This Agreement is governed by the laws of the State of New
#             York and the intellectual property laws of the United
#             States of America. No party to this Agreement will bring a
#             legal action under this Agreement more than one year after
#             the cause of action arose. Each party waives its rights to
#             a jury trial in any resulting litigation. 
#
#
#
#*/
#
#/* (C) COPYRIGHT International Business Machines Corp. 2001          */



DEEP4758_DLL="/usr/lib/opencryptoki/stdll/PKCS11_4758.so"
DEEP4758_DLL_FN="PKCS11_4758.so"
DEEP4758_INIT="SC_Initialize"

SOFT_DIR="/var/lib/opencryptoki/swtok"
SOFT_DLL="/usr/lib/opencryptoki/stdll/libpkcs11_sw.so"
SOFT_DLL_FN="libpkcs11_sw.so"
SOFT_INIT="ST_Initialize"

ICA_DIR="/var/lib/opencryptoki/lite"
ICA_DLL="/usr/lib/opencryptoki/stdll/libpkcs11_ica.so"
ICA_DLL_FN="libpkcs11_ica.so"
ICA_INIT="ST_Initialize"

BCOM_DIR="/var/lib/opencryptoki/bcom"
BCOM_DLL="/usr/lib/opencryptoki/stdll/PKCS11_BC.so"
BCOM_DLL_FN="PKCS11_BC.so"
BCOM_INIT="ST_Initialize"

AEP_DIR="/var/lib/opencryptoki/aep"
AEP_DLL="/usr/lib/opencryptoki/stdll/PKCS11_AEP.so"
AEP_DLL_FN="PKCS11_AEP.so"
AEP_INIT="ST_Initialize"

CR_DIR="/var/lib/opencryptoki/cr"
CR_DLL="/usr/lib/opencryptoki/stdll/PKCS11_CR.so"
CR_DLL_FN="PKCS11_CR.so"
CR_INIT="ST_Initialize"

TPM_DIR="/var/lib/opencryptoki/tpm"
TPM_DLL="/usr/lib/opencryptoki/stdll/libpkcs11_tpm.so"
TPM_DLL_FN="libpkcs11_tpm.so"
TPM_INIT="ST_Initialize"

CCA_DIR="/var/lib/opencryptoki/ccatok"
CCA_DLL="/usr/lib/opencryptoki/stdll/libpkcs11_cca.so"
CCA_DLL_FN="libpkcs11_cca.so"
CCA_INIT="ST_Initialize"

SYSTEM=`uname -s`
MANUFACTURER=`uname -rs`

# Return Codes
OK=0
INVALID_PARAMS=1
NOT_CRYPT_DEVICE=2
NOT_VALID_DEVICE=3
NO_DATABASE=4

if [ ! $# = 2 ]
  then
    echo "Usage: $0 devicenumber depth"
    exit $INVALID_PARAMS
fi

DEVICE=$1
DEPTH=$2

# Check for the existance of the directories 
if [ ! -d /var/lib/opencryptoki ]
then
	mkdir -p /var/lib/opencryptoki
        chgrp pkcs11 /var/lib/opencryptoki
	chmod -R g+rwx /var/lib/opencryptoki
fi


# If the depth is "soft" then we are configuring the soft token....
if [ $DEPTH = "soft" ]
then
    test  -d $SOFT_DIR
    if [ $? -ne 0 ]
    then
	mkdir  $SOFT_DIR
	chgrp pkcs11 $SOFT_DIR
	mkdir "$SOFT_DIR"/TOK_OBJ
	chgrp pkcs11 "$SOFT_DIR"/TOK_OBJ
    fi
    SYS_SLOT="Soft"
fi

# If the depth is "tpm" then we are configuring the tpm token....
if [ $DEPTH = "tpm" ]
then
    test  -d $TPM_DIR
    if [ $? -ne 0 ]
    then
	mkdir  $TPM_DIR
	chgrp pkcs11 $TPM_DIR
    fi
    SYS_SLOT="TPM"
fi

if [ $DEPTH = "cca" ]
then
    test  -d $CCA_DIR
    if [ $? -ne 0 ]
    then
       mkdir  $CCA_DIR
       chgrp pkcs11 $CCA_DIR
       mkdir "$CCA_DIR"/TOK_OBJ
       chgrp pkcs11 "$CCA_DIR"/TOK_OBJ
    fi
    SYS_SLOT="CCA"
fi

# If we are using a shallow device, make sure that the directory
# to store token objects is available, if not create it and change
# the ownership to the pkcs11 group 


if [ $DEPTH = "ica" ]
then
    test  -d $ICA_DIR
    if [ $? -ne 0 ]
    then
	mkdir  $ICA_DIR
	chgrp pkcs11 $ICA_DIR
	mkdir "$ICA_DIR"/TOK_OBJ
	chgrp pkcs11 "$ICA_DIR"/TOK_OBJ
    fi
    SYS_SLOT="ICA"
fi

if [ $DEPTH = "bcom" ]
then
    test  -d $BCOM_DIR
    if [ $? -ne 0 ]
    then
	mkdir  $BCOM_DIR
	chgrp pkcs11 $BCOM_DIR
	mkdir "$BCOM_DIR"/TOK_OBJ
	chgrp pkcs11 "$BCOM_DIR"/TOK_OBJ
    fi
    SYS_SLOT="BCOM"
fi

if [ $DEPTH = "aep" ]
then
    test  -d $AEP_DIR
    if [ $? -ne 0 ]
    then
	mkdir  $AEP_DIR
	chgrp pkcs11 $AEP_DIR
	mkdir "$AEP_DIR"/TOK_OBJ
	chgrp pkcs11 "$AEP_DIR"/TOK_OBJ
    fi
    SYS_SLOT="AEP"
fi

if [ $DEPTH = "cr" ]
then
    test  -d $CR_DIR
    if [ $? -ne 0 ]
    then
        mkdir  $CR_DIR
        chgrp pkcs11 $CR_DIR
        mkdir "$CR_DIR"/TOK_OBJ
        chgrp pkcs11 "$CR_DIR"/TOK_OBJ
    fi
    SYS_SLOT="CRNT"
fi

# The device name is now parsed to find the minor number of the
# device we are examining.  Since the last letter of crypt is "t"
# everything after the t is treated as the device number

if [ $DEPTH = "deep" ]
then
    SYS_SLOT="$DEVICE"
fi

SLOT_DESCRIPTION=`echo $MANUFACTURER $SYSTEM  "("$SYS_SLOT")"`


CFGFILE=/var/lib/opencryptoki/pk_config_data

if [ $DEPTH = "deep" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|$DEVICE|$DEEP4758_DLL_FN|$DEEP4758_INIT" >>$CFGFILE

elif [ $DEPTH = "ica" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$ICA_DLL_FN|$ICA_INIT" >>$CFGFILE
elif [ $DEPTH = "bcom" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$BCOM_DLL_FN|$BCOM_INIT" >>$CFGFILE
elif [ $DEPTH = "aep" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$AEP_DLL_FN|$AEP_INIT" >>$CFGFILE
elif [ $DEPTH = "cr" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$CR_DLL_FN|$CR_INIT" >>$CFGFILE
elif [ $DEPTH = "soft" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|FALSE|0|0|1|1|NONE|$SOFT_DLL_FN|$SOFT_INIT" >>$CFGFILE
elif [ $DEPTH = "tpm" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$TPM_DLL_FN|$TPM_INIT" >>$CFGFILE
elif [ $DEPTH = "cca" ]
then
echo "TRUE|0|$SLOT_DESCRIPTION|$MANUFACTURER|TRUE|FALSE|TRUE|0|0|1|1|NONE|$CCA_DLL_FN|$CCA_INIT" >>$CFGFILE
fi

cd /var/lib/opencryptoki
chmod -R g+wrx .


exit $OK
