Stan R created DIRSERVER-2175:
---------------------------------

             Summary: apacheds.sh startup script: support for more shells
                 Key: DIRSERVER-2175
                 URL: https://issues.apache.org/jira/browse/DIRSERVER-2175
             Project: Directory ApacheDS
          Issue Type: Improvement
    Affects Versions: 2.0.0-M23
         Environment: Linux, Busybox Ash shell
            Reporter: Stan R
            Priority: Trivial


Attempting to start ApacheDS via the apacheds.sh startup script with a shell 
other than bash, such as busybox Ash shell, results in the following error:
{noformat}
$ sh apacheds.sh run
apacheds.sh: line 113: syntax error: unexpected "(" (expecting ")")
{/noformat}

The offending line 113 (and 1 previous) for reference:
{noformat}
# Build the classpath (http://stackoverflow.com/a/4729899/516433)
CLASSPATH=$(JARS=("$ADS_HOME"/lib/*.jar); IFS=:; echo "${JARS[*]}")
{/noformat}

Analyzing the offending line reveals that the classpath is built using a 
bash-specific syntax/feature for arrays -- functionality not found in other 
shells. Following the helpful link on line 112 to stackoverflow for further 
explanation reveals that while the manual classpath creation methodology via 
bash arrays used to be the "best" available, it is now deprecated. According to 
the stackoverflow page, building the classpath manually is no longer a 
necessity as of at least 2012; the classpath can now contain wildcards, and 
Java will kindly resolve the wildcards on its own. Further investigation of the 
classpath wildcard resolution functionality reveals that the feature has been 
present in Java 1.7 since release 1 (I downloaded the first release and looked 
at the manpage "java.1") in 2011.

Since ApacheDS requires Java 1.7 as a prerequisite, and the wildcard classpath 
resolution functionality is present in all versions of Java 1.7 and up, I 
propose eliminating the bash-only manual classpath creation, and instead take 
advantage of the 5-year-old enhancement present in Java, so that other shells 
may be supported when executing the apacheds.sh script.

The largest benefit to supporting shells other than bash, is for situations in 
which ApacheDS is deployed in minimalized container environments for security 
reasons, where attempts are made to reduce potential attack surface by removing 
all unnecessary features, libraries, and software. To this end, bash is a prime 
candidate for removal as a dependency (see shellshock).

Given the above, changing line 113 to the following allows the script to be 
executed, and ApacheDS to be launched, without error in busybox's ash shell and 
bash shell (and perhaps others):
{noformat}
CLASSPATH="$ADS_HOME/lib/*"
{/noformat}

I will attempt to attach a patchfile if I can.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to