| #!/bin/sh | |
| # | |
| # $Id: Customize,v 1.9 2005/05/11 13:02:18 abe Exp $ | |
| # | |
| # Customize: customize dialect's machine.h header file. | |
| # | |
| # Allows easy modification of some important compile-time definitions for | |
| # lsof, made in the dialect's machine.h header file, including: | |
| # | |
| # HASSECURITY the security option | |
| # HASNOSOCKSECURITY | |
| # the socket oberalization of HASSECURITY | |
| # HASDCACHE enabling/disabling the device cache file | |
| # (Note: changing the device cache file option isn't | |
| # offered when machine.h contains NEVER_HASDCACHE | |
| # anywhere, including in a comment.) | |
| # HASENVDC enabling/disabling device cache path from environment | |
| # HASKERNIDCK enabling/disabling the kernel identity check | |
| # (not done for some dialects) | |
| # HASPERSDC enabling/disabling personal device cache path | |
| # construction | |
| # HASPERSDCPATH enabling/disabling additional personal device cache | |
| # path component | |
| # HASSYSDC enabling/disabling system-wide device cache file path | |
| # HASXOPT_ROOT enabling/disabling root use of the -X option | |
| # WARNDEVACCESS enabling inaccessible /dev node warnings | |
| # (Note: changing the inaccessible /dev/node warning | |
| # option isn't offered when machine.h contains | |
| # NEVER_WARNDEVACCESS anywhere, including in a | |
| # comment.) | |
| # WARNINGSTATE enable/disabling default warning message state | |
| # | |
| # Usage: Customize [dialect_directory] | |
| # | |
| # where: dialect_directory (optional) is the directory in which the dialect's | |
| # dialect's sources, Makefile and scripts are found | |
| OLD=machine.h | |
| NEW=new_machine.h | |
| # Save optional dialect directory. | |
| if test $# -eq 1 | |
| then | |
| DialDir=$1 | |
| else | |
| DialDir="" | |
| fi | |
| # Establish trap and stty handling. | |
| ISIG=":" | |
| trap 'rm -f $NEW; $ISIG; exit 1' 1 2 3 15 | |
| stty -a 2>&1 | grep isig > /dev/null | |
| if test $? -eq 0 | |
| then | |
| stty -a 2>&1 | egrep -e -isig > /dev/null | |
| if test $? -eq 0 | |
| then | |
| ISIG="stty -isig" | |
| stty isig | |
| fi | |
| fi | |
| # Decide how to use echo. | |
| ECHO=`echo -n ""` | |
| if test "X$ECHO" = "X-n " | |
| then | |
| EC="\c" | |
| EO="" | |
| else | |
| EC="" | |
| EO="-n" | |
| fi | |
| # Decide how to use tail(1). | |
| TMP1=`tail -n 1 $0 2> /dev/null` | |
| if test $? -eq 0 -a "X$TMP1" = "X#LAST_LINE" | |
| then | |
| TA="-n 1" | |
| else | |
| TA="-1" | |
| fi | |
| # Display the introduction and basic explanation. | |
| cat << .CAT_MARK | |
| You may now customize the machine.h header file for this UNIX | |
| dialect. The customizations will take effect when you compile | |
| lsof. You may also choose to skip customization and proceed to | |
| the compilation of lsof. | |
| If you don't know if you need to customize or want to know more | |
| about what you can customize, consult the 00DCACHE, 00FAQ, 00PORTING, | |
| and 00README files of the lsof distribution. You might also find | |
| it helpful to examine the machine.h header file for the dialect | |
| you're customizing. | |
| You don't need to use this procedure to customize lsof; you can | |
| edit the machine.h header file directly. If you later decide you | |
| want to use this procedure to customize machine.h, execute the | |
| ./Customize script. | |
| .CAT_MARK | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to customize (y|n) [y]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| exit 0 | |
| fi | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "Customizing ..." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [y]." | |
| fi | |
| done | |
| # See if $OLD exists. | |
| if test ! -r $OLD | |
| then | |
| echo "" | |
| echo "FATAL: The file \"$OLD\" doesn't exist. Customization can't" | |
| echo "continue without it." | |
| echo "" | |
| echo "Did you run the Configure script?" | |
| echo "" | |
| echo "Customize quits." | |
| echo "" | |
| exit 1 | |
| fi | |
| # See if $NEW exists. | |
| if test -r $NEW | |
| then | |
| echo "" | |
| echo "=====================================================================" | |
| echo "" | |
| echo "WARNING: \"$NEW\" exists. Customization will replace it." | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to remove $NEW (y|n) [y]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "Removing $NEW" | |
| echo "" | |
| rm -f $NEW | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| echo "" | |
| echo "FATAL: Customize quits; it must be able to create \"$NEW\"." | |
| echo "" | |
| exit 1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [y]." | |
| fi | |
| fi | |
| done | |
| fi | |
| # Process HASSECURITY. | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| When HASSECURITY is enabled, only the root user may use lsof to | |
| examine all open files; other users may examine only the files | |
| belonging to the real user ID of their lsof process. If | |
| HASNOSOCKSECURITY is also defined, anyone may list anyone else's | |
| open socket files, provided their listing is selected with the "-i" | |
| option. | |
| When HASSECURITY is disabled, anyone may use lsof to examine all | |
| open files. | |
| .CAT_MARK | |
| grep HASSECURITY $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "HASSECURITY is enabled." | |
| NSEC=1 | |
| else | |
| echo "HASSECURITY is disabled." | |
| NSEC=0 | |
| fi | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $NSEC -eq 1 | |
| then | |
| echo $EO "Disable HASSECURITY (y|n) [n]? $EC" | |
| else | |
| echo $EO "Enable HASSECURITY (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $NSEC -eq 1 | |
| then | |
| NSEC=0 | |
| echo "HASSECURITY will be disabled." | |
| else | |
| NSEC=1 | |
| echo "HASSECURITY will be enabled." | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASSECURITY will not be changed." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| # If HASSECURITY is enabled, see if HASNOSOCKSECURITY should also be defined. | |
| if test $NSEC -eq 1 | |
| then | |
| cat << .CAT_MARK | |
| ==================================================================== | |
| When HASSECURITY is enabled, you may also define HASNOSOCKSECURITY. | |
| When both are defined, no one but root may list all of anyone else's | |
| open files -- only their own open files -- but anyone may list | |
| anyone else's open socket files. | |
| This option is useful with ntop (http://www.ntop.org). | |
| .CAT_MARK | |
| grep HASNOSOCKSECURITY $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "HASNOSOCKSECURITY is enabled." | |
| SOCKSEC=1 | |
| else | |
| echo "HASNOSOCKSECURITY is disabled." | |
| SOCKSEC=0 | |
| fi | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $SOCKSEC -eq 1 | |
| then | |
| echo $EO "Disable HASNOSOCKSECURITY (y|n) [n]? $EC" | |
| else | |
| echo $EO "Enable HASNOSOCKSECURITY (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $SOCKSEC -eq 1 | |
| then | |
| SOCKSEC=0 | |
| echo "HASNOSOCKSECURITY will be disabled." | |
| else | |
| SOCKSEC=1 | |
| echo "HASNOSOCKSECURITY will be enabled." | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASNOSOCKSECURITY will not be changed." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| else | |
| SOCKSEC=0 | |
| fi | |
| # Process WARNINGSTATE. | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| When WARNINGSTATE is enabled, lsof will will issue whatever warning | |
| messages it finds necessary. When WARNINGSTATE is disabled, lsof | |
| will issue no warning messages. For individual uses of lsof, -w | |
| disables warning state and +w enables it. | |
| .CAT_MARK | |
| grep WARNINGSTATE $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "WARNINGSTATE is disabled." | |
| WST=0 | |
| else | |
| echo "WARNINGSTATE is enabled." | |
| WST=1 | |
| fi | |
| END=0 | |
| NWST=$WST | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $NWST -eq 0 | |
| then | |
| echo $EO "Enable WARNINGSTATE? (y|n) [n]? $EC" | |
| else | |
| echo $EO "Disable WARNINGSTATE? (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $NWST -eq 0 | |
| then | |
| echo "WARNINGSTATE will be enabled." | |
| NWST=1 | |
| else | |
| echo "WARNINGSTATE will be disabled." | |
| NWST=0 | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "WARNINGSTATE will not be changed." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| # Process WARNDEVACCESS, unless the dialect's machine.h header file contains | |
| # NEVER_WARNDEVACCESS. | |
| grep NEVER_WARNDEVACCESS $OLD > /dev/null | |
| if test $? -eq 0 | |
| then | |
| NEVERWDA=1 | |
| NWDA=0 | |
| else | |
| NEVERWDA=0 | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| When WARNDEVACCESS is enabled, lsof will issue warning messages | |
| when it can't access nodes in /dev (or /devices), subject to the | |
| default or explicit (-w) WARNINGSTATE. | |
| When WARNDEVACCESS is disabled, lsof will silently skip nodes in | |
| /dev (or /devices) that it can't access. | |
| .CAT_MARK | |
| grep WARNDEVACCESS $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "WARNDEVACCESS is enabled." | |
| WDA=1 | |
| else | |
| echo "WARNDEVACCESS is disabled." | |
| WDA=0 | |
| fi | |
| END=0 | |
| NWDA=$WDA | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $NWDA -eq 1 | |
| then | |
| echo $EO "Disable WARNDEVACCESS (y|n) [n]? $EC" | |
| else | |
| echo $EO "Enable WARNDEVACCESS (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $NWDA -eq 1 | |
| then | |
| echo "WARNDEVACCESS will be disabled." | |
| NWDA=0 | |
| else | |
| echo "WARNDEVACCESS will be enabled." | |
| NWDA=1 | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "WARNDEVACCESS will not be changed." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| fi | |
| # Process HASDCACHE, unless the dialect's machine.h header file contains | |
| # NEVER_HASDCACHE. | |
| ENVV="" | |
| ENVN=0 | |
| PDCV="" | |
| PDCN=0 | |
| PDCPV="" | |
| PDCPN=0 | |
| SDCV="" | |
| SDCN=0 | |
| grep NEVER_HASDCACHE $OLD > /dev/null | |
| if test $? -eq 0 | |
| then | |
| NEVERDC=1 | |
| CDC=0 | |
| DC=0 | |
| NDC=0 | |
| else | |
| NEVERDC=0 | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| When HASDCACHE is enabled, lsof will write a device cache file that | |
| contains information about the nodes in /dev (or /devices). The | |
| options HASENVDC, HASPERSDC, HASPERSDCPATH, and HASSYSDC define | |
| the device cache file path. | |
| When HASDCACHE is disabled, lsof won't write a device cache file. | |
| Consult the 00DCACHE and 00FAQ files of the lsof distribution for | |
| more information. | |
| .CAT_MARK | |
| grep HASDCACHE $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "HASDCACHE is enabled." | |
| DC=1 | |
| else | |
| echo "HASDCACHE is disabled." | |
| DC=0 | |
| fi | |
| END=0 | |
| NDC=$DC | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $NDC -eq 1 | |
| then | |
| echo $EO "Disable HASDCACHE (y|n) [n]? $EC" | |
| else | |
| echo $EO "Enable HASDCACHE (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $NDC -eq 1 | |
| then | |
| echo "HASDCACHE will be disabled." | |
| NDC=0 | |
| else | |
| echo "HASDCACHE will be enabled." | |
| NDC=1 | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASDCACHE will not be changed." | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| # See if other device cache options need to be declared. | |
| if test $DC -eq 1 -a $NDC -eq 1 | |
| then | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| You have decided that HASDCACHE should be defined. There are other | |
| definitions associated with HASDCACHE that specify options for the | |
| formation of the device cache file path. You may change them. | |
| Consult the 00DCACHE and 00FAQ files of the lsof distribution for | |
| more information. | |
| The current path options are: | |
| .CAT_MARK | |
| grep HASENVDC $OLD | tail $TA | egrep "^#define" | |
| egrep "HASPERSDC$|HASPERSDC[ ]" $OLD | tail $TA | egrep "^#define" | |
| grep HASPERSDCPATH $OLD | tail $TA | egrep "^#define" | |
| grep HASSYSDC $OLD | tail $TA | egrep "^#define" | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to change path options (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| CDC=1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| CDC=0 | |
| END=1 | |
| else | |
| if test "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "The path options will not be changed." | |
| CDC=0 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| fi | |
| done | |
| else | |
| CDC=0 | |
| fi | |
| if test \( $NDC -eq 1 -a $DC -eq 0 \) -o \( $DC -eq 1 -a $CDC -eq 1 \) | |
| then | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| You may specify for HASENVDC the name of the environment variable | |
| from which lsof should take the device cache file path for non-root | |
| users. Press ENTER to use the current value of HASENVDC: | |
| .CAT_MARK | |
| echo $EO " $EC" | |
| TMP1=`grep HASENVDC $OLD | tail $TA | egrep "^#define"` | |
| if test "X$TMP1" != "X" | |
| then | |
| TMP1=`echo "$TMP1" | sed 's/^#define[ ]HASENVDC[ ]"\([^"]*\)".*$/\1/'` | |
| echo "$TMP1" | |
| else | |
| echo "no current HASENVDC value" | |
| fi | |
| END=0 | |
| GV=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to define a name for HASENVDC (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| ENVV="" | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| GV=1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASENVDC will not be changed." | |
| ENVV=$TMP1 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| fi | |
| done | |
| if test $GV -eq 1 | |
| then | |
| echo "" | |
| echo $EO "Please enter the HASENVDC name (no quotes): $EC" | |
| read TMP1 EXCESS | |
| ENVV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'` | |
| if test "X$ENVV" = "X" | |
| then | |
| ENVN=1 | |
| fi | |
| fi | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| HASPERSDC is a format that specifies how the personal device cache | |
| path is constructed. Consult the 00DCACHE and 00FAQ files of the | |
| lsof distribution for information on the conversions supported in | |
| HASPERSDC. Press ENTER to use the curent HASPERSDC format: | |
| .CAT_MARK | |
| echo $EO " $EC" | |
| TMP1=`egrep "HASPERSDC$|HASPERSDC[ ]" $OLD | tail $TA | egrep "^#define"` | |
| if test "X$TMP1" != "X" | |
| then | |
| TMP1=`echo "$TMP1" | sed 's/^#define[ ]HASPERSDC[ ]"\([^"]*\)".*$/\1/'` | |
| echo "$TMP1" | |
| else | |
| echo "no current HASPERSDC format" | |
| fi | |
| END=0 | |
| GV=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to define a format for HASPERSDC (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| GV=1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASPERSDC will not be changed." | |
| PDCV=$TMP1 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| fi | |
| done | |
| if test $GV -eq 1 | |
| then | |
| echo "" | |
| echo $EO "Please enter the HASPERSDC format (no quotes): $EC" | |
| read TMP1 EXCESS | |
| PDCV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'` | |
| if test "X$PDCV" = "X" | |
| then | |
| PDCN=1 | |
| fi | |
| fi | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| Specify for HASPERSDCPATH the name of the environment variable from | |
| which lsof should take a path name component to insert at the %p | |
| conversion in the HASPERSDC format. | |
| Consult the 00FAQ and 00DCACHE files of the lsof distribution for | |
| more information on HASPERSDCPATH usage. | |
| Press ENTER to use the current value for HASPERSDCPATH: | |
| .CAT_MARK | |
| echo $EO " $EC" | |
| TMP1=`grep HASPERSDCPATH $OLD | tail $TA | egrep "^#define"` | |
| if test "X$TMP1" != "X" | |
| then | |
| TMP1=`echo "$TMP1" | sed 's/^#define[ ]HASPERSDCPATH[ ]"\([^"]*\)".*$/\1/'` | |
| echo "$TMP1" | |
| else | |
| echo "no current HASPERSDCPATH value" | |
| fi | |
| END=0 | |
| GV=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to change HASPERSDCPATH (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASPERSDCPATH will not be changed." | |
| PDCPV=$TMP1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| GV=1 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| if test $GV -eq 1 | |
| then | |
| echo "" | |
| echo $EO "Please enter the HASPERSDCPATH name (no quotes): $EC" | |
| read TMP1 EXCESS | |
| PDCPV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'` | |
| if test "X$PDCPV" = "X" | |
| then | |
| PDCPN=1 | |
| fi | |
| fi | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| Specify for HASSYSDC the system-wide device cache file path. Press | |
| ENTER to use the current HASSYSDC value: | |
| .CAT_MARK | |
| echo $EO " $EC" | |
| TMP1=`grep HASSYSDC $OLD | tail $TA | egrep "^#define"` | |
| if test "X$TMP1" != "X" | |
| then | |
| TMP1=`echo "$TMP1" | sed 's/^#define[ ]HASSYSDC[ ]"\([^"]*\)".*$/\1/'` | |
| echo "$TMP1" | |
| else | |
| echo "no current HASSYSDC value" | |
| fi | |
| END=0 | |
| GV=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to define a system-device path (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| GV=1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "No HASSYSDC change will be made." | |
| SDCV=$TMP1 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| fi | |
| done | |
| if test $GV -eq 1 | |
| then | |
| echo "" | |
| echo $EO "Please enter the system-wide path (no quotes): $EC" | |
| read TMP1 EXCESS | |
| SDCV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'` | |
| if test "X$SDCV" = "X" | |
| then | |
| SDCN=1 | |
| fi | |
| fi | |
| fi | |
| fi | |
| # If HASXOPT is defined, and HASXOPT_ROOT is mentioned, | |
| # ask about changing HASXOPT_ROOT. | |
| HXRC=0 | |
| grep HASXOPT $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| grep HASXOPT_ROOT $OLD > /dev/null | |
| if test $? -eq 0 | |
| then | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| HASXOPT is defined. If the dialect for which you are customizing | |
| appears in the following list, you may want to change the definition | |
| of HASXOPT_ROOT to restrict the use of the X option to lsof processes | |
| whose real user ID is root, or enable use of it by all user IDs. | |
| AIX the -X option enables the risky operation of letting | |
| lsof read library entry structures with readx(). | |
| If HASXOPT_ROOT is defined, only processes whose | |
| real user ID is root will be allowed to use -X. | |
| If HASXOPT_ROOT is undefined, any process will be | |
| allowed to use -X. Consult the 00FAQ file of the | |
| lsof distribution for more information on why | |
| readx() may be risky. | |
| .CAT_MARK | |
| grep HASXOPT_ROOT $OLD | tail $TA | egrep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "HASXOPT_ROOT is defined." | |
| HXR="undefine" | |
| HXRS=1 | |
| else | |
| echo "HASXOPT_ROOT is not defined." | |
| HXR="define" | |
| HXRS=0 | |
| fi | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo $EO "Do you want to $HXR HASXOPT_ROOT (y|n) [n]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| HXRA=1 | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASXOPT_ROOT will not be changed." | |
| HXRA=0 | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| if test $HXRA -eq 1 | |
| then | |
| HXRC=1 | |
| fi | |
| fi | |
| fi | |
| # Process HASKERNIDCK. Skip processing for selected dialect directories. | |
| case $DialDir in | |
| linux/proc) | |
| NIDCK=0 | |
| ;; | |
| *) | |
| cat << .CAT_MARK | |
| ===================================================================== | |
| When HASKERNIDCK is enabled, lsof compares the identity of the | |
| kernel where it was built to the identity of the kernel where it | |
| is running. This check can detect an lsof executable inappropriate | |
| for the system on which it is being run. | |
| The kernel identity check can take considerable time on some UNIX | |
| dialects -- e.g., AIX -- so there may be occasions when it is | |
| desirable to disable it, in spite of the increased risk of using | |
| an inappropriate lsof executable. | |
| .CAT_MARK | |
| grep HASKERNIDCK $OLD | tail $TA | grep "^#define" > /dev/null | |
| if test $? -eq 0 | |
| then | |
| echo "HASKERNIDCK is enabled." | |
| IDCK=1 | |
| else | |
| echo "HASKERNIDCK is disabled." | |
| IDCK=0 | |
| fi | |
| END=0 | |
| NIDCK=$IDCK | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| if test $NIDCK -eq 1 | |
| then | |
| echo $EO "Disable HASKERNIDCK (y|n) [n]? $EC" | |
| else | |
| echo $EO "Enable HASKERNIDCK (y|n) [n]? $EC" | |
| fi | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" | |
| then | |
| echo "" | |
| if test $NIDCK -eq 1 | |
| then | |
| NIDCK=0 | |
| echo "HASKERNIDCK will be disabled." | |
| else | |
| NIDCK=1 | |
| echo "HASKERNIDCK will be enabled." | |
| fi | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X" | |
| then | |
| echo "" | |
| echo "HASKERNIDCK will not be changed." | |
| END=1 | |
| NIDCK=$IDCK | |
| else | |
| echo "" | |
| echo "Please answer y|n [n]." | |
| fi | |
| fi | |
| done | |
| ;; | |
| esac | |
| # Initialize new machine.h. | |
| rm -f $NEW | |
| cp $OLD $NEW | |
| chmod 0644 $NEW | |
| echo "" >> $NEW | |
| echo "/*" >> $NEW | |
| echo $EO " * Added by Customize on $EC" >> $NEW | |
| date >> $NEW | |
| echo " */" >> $NEW | |
| echo "" >> $NEW | |
| # Change HASSECURITY and HASNOSOCKSECURITY, as required. | |
| echo "#undef HASSECURITY" >> $NEW | |
| echo "#undef HASNOSOCKSECURITY" >> $NEW | |
| if test $NSEC -eq 1 | |
| then | |
| echo "#define HASSECURITY 1" >> $NEW | |
| if test $SOCKSEC -eq 1 | |
| then | |
| echo "#define HASNOSOCKSECURITY 1" >> $NEW | |
| fi | |
| fi | |
| # Change WARNDEVACCESS, as required. | |
| if test $NEVERWDA -eq 0 | |
| then | |
| echo "#undef WARNDEVACCESS" >> $NEW | |
| if test $NWDA -eq 1 | |
| then | |
| echo "#define WARNDEVACCESS 1" >> $NEW | |
| fi | |
| fi | |
| # Change WARNINGSTATE, as required. | |
| echo "#undef WARNINGSTATE" >> $NEW | |
| if test $NWST -eq 0 | |
| then | |
| echo "#define WARNINGSTATE 1" >> $NEW | |
| fi | |
| # Change device cache definitions, as required. | |
| if test \( $NDC -eq 1 -a $DC -eq 0 \) -o \( $DC -eq 1 -a $CDC -eq 1 \) | |
| then | |
| if test "X$ENVV" = "X" -a "X$PDCV" = "X" -a "X$SDCV" = "X" | |
| then | |
| cat << .CAT_MARK | |
| FATAL: HASDCACHE is defined, but there is no definition for | |
| any of HASENVDC, HASPERSDC, or HASSYSDC | |
| No new machine.h has been created. | |
| Customize quits. | |
| Restart Customize and define at least one of HASENVDC, | |
| HASPERSDC, or HASSYSDC. | |
| .CAT_MARK | |
| rm -f $NEW | |
| exit 1 | |
| fi | |
| fi | |
| if test "X$PDCV" != "X" | |
| then | |
| echo "$PDCV" | grep "%p" > /dev/null | |
| if test $? -eq 0 -a $PDCPN -eq 1 | |
| then | |
| cat << .CAT_MARK | |
| FATAL: HASDCACHE is defined and HASPERSDC has a %p conversion, | |
| but HASPERSDCPATH is NULL. | |
| No new machine.h has been created. | |
| Customize quits. | |
| Restart Customize and define HASPERSDCPATH. | |
| .CAT_MARK | |
| rm -f $NEW | |
| exit 1 | |
| fi | |
| fi | |
| echo "#undef HASDCACHE" >> $NEW | |
| if test $NEVERDC -eq 1 | |
| then | |
| echo "#undef HASENVDC" >> $NEW | |
| echo "#undef HASPERSDC" >> $NEW | |
| echo "#undef HASPERSDCPATH" >> $NEW | |
| echo "#undef HASSYSDC" >> $NEW | |
| else | |
| if test $NDC -eq 1 | |
| then | |
| echo "#define HASDCACHE 1" >> $NEW | |
| if test "X$ENVV" != "X" -o $ENVN -eq 1 | |
| then | |
| echo "#undef HASENVDC" >> $NEW | |
| if test $ENVN -eq 0 | |
| then | |
| echo "#define HASENVDC \"$ENVV\"" >> $NEW | |
| fi | |
| fi | |
| if test "X$PDCV" != "X" -o $PDCN -eq 1 | |
| then | |
| echo "#undef HASPERSDC" >> $NEW | |
| if test $PDCN -eq 0 | |
| then | |
| echo "#define HASPERSDC \"$PDCV\"" >> $NEW | |
| fi | |
| fi | |
| if test "X$PDCPV" != "X" -o $PDCPN -eq 1 | |
| then | |
| echo "#undef HASPERSDCPATH" >> $NEW | |
| if test $PDCPN -eq 0 | |
| then | |
| echo "#define HASPERSDCPATH \"$PDCPV\"" >> $NEW | |
| fi | |
| fi | |
| if test "X$SDCV" != "X" -o $SDCN -eq 1 | |
| then | |
| echo "#undef HASSYSDC" >> $NEW | |
| if test $SDCN -eq 0 | |
| then | |
| echo "#define HASSYSDC \"$SDCV\"" >> $NEW | |
| fi | |
| fi | |
| fi | |
| fi | |
| # Change HASXOPT_ROOT, as required. | |
| if test $HXRC -eq 1 | |
| then | |
| if test $HXRS -eq 1 | |
| then | |
| echo "#undef HASXOPT_ROOT" >> $NEW | |
| else | |
| echo "#define HASXOPT_ROOT 1" >> $NEW | |
| fi | |
| fi | |
| # Change HASKERNIDCK, as required. | |
| echo "#undef HASKERNIDCK" >> $NEW | |
| if test $NIDCK -eq 1 | |
| then | |
| echo "#define HASKERNIDCK 1" >> $NEW | |
| fi | |
| # Replace the current machine.h with the new one, as requested. | |
| echo "" | |
| echo "=====================================================================" | |
| echo "" | |
| echo "A new $OLD file has been created in \"$NEW\"." | |
| END=0 | |
| while test $END -eq 0 | |
| do | |
| echo "" | |
| echo "Do you want to rename $OLD to ${OLD}.old and replace it with" | |
| echo $EO "$NEW (y|n) [y]? $EC" | |
| read ANS EXCESS | |
| if test "X$ANS" = "Xn" -o "X$ANS" = "XN" | |
| then | |
| END=1 | |
| else | |
| if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X" | |
| then | |
| rm -f ${OLD}.old | |
| mv $OLD ${OLD}.old | |
| mv $NEW $OLD | |
| END=1 | |
| else | |
| echo "" | |
| echo "Please answer y|n [y]." | |
| fi | |
| fi | |
| done | |
| echo "" | |
| echo "You may now run the make command -- e.g.," | |
| echo "" | |
| echo " $ make" | |
| echo "" | |
| exit 0 | |
| #LAST_LINE |