11#! /bin/bash
22set -Eeuo pipefail
3+ set -o xtrace
34
45if [ " ${1: 0: 1} " = ' -' ]; then
56 set -- mongod " $@ "
@@ -68,9 +69,9 @@ _mongod_hack_have_arg() {
6869 local arg
6970 for arg; do
7071 case " $arg " in
71- " $checkArg " | " $checkArg " =* )
72- return 0
73- ;;
72+ " $checkArg " | " $checkArg " =* )
73+ return 0
74+ ;;
7475 esac
7576 done
7677 return 1
@@ -83,14 +84,14 @@ _mongod_hack_get_arg_val() {
8384 local arg=" $1 "
8485 shift
8586 case " $arg " in
86- " $checkArg " )
87- echo " $1 "
88- return 0
89- ;;
90- " $checkArg " =* )
91- echo " ${arg# " $checkArg " =} "
92- return 0
93- ;;
87+ " $checkArg " )
88+ echo " $1 "
89+ return 0
90+ ;;
91+ " $checkArg " =* )
92+ echo " ${arg# " $checkArg " =} "
93+ return 0
94+ ;;
9495 esac
9596 done
9697 return 1
@@ -131,14 +132,14 @@ _mongod_hack_ensure_no_arg_val() {
131132 local arg=" $1 "
132133 shift
133134 case " $arg " in
134- " $ensureNoArg " )
135- shift # also skip the value
136- continue
137- ;;
138- " $ensureNoArg " =* )
139- # value is already included
140- continue
141- ;;
135+ " $ensureNoArg " )
136+ shift # also skip the value
137+ continue
138+ ;;
139+ " $ensureNoArg " =* )
140+ # value is already included
141+ continue
142+ ;;
142143 esac
143144 mongodHackedArgs+=(" $arg " )
144145 done
@@ -282,10 +283,10 @@ if [ "$originalArgOne" = 'mongod' ]; then
282283 # if we've got any /docker-entrypoint-initdb.d/* files to parse later, we should initdb
283284 for f in /docker-entrypoint-initdb.d/* ; do
284285 case " $f " in
285- * .sh | * .js) # this should match the set of files we check for below
286- shouldPerformInitdb=" $f "
287- break
288- ;;
286+ * .sh | * .js) # this should match the set of files we check for below
287+ shouldPerformInitdb=" $f "
288+ break
289+ ;;
289290 esac
290291 done
291292 fi
@@ -321,20 +322,6 @@ if [ "$originalArgOne" = 'mongod' ]; then
321322 _mongod_hack_ensure_no_arg_val --replSet " ${mongodHackedArgs[@]} "
322323 fi
323324
324- # "BadValue: need sslPEMKeyFile when SSL is enabled" vs "BadValue: need to enable SSL via the sslMode flag when using SSL configuration parameters"
325- tlsMode=' disabled'
326- if _mongod_hack_have_arg ' --tlsCertificateKeyFile' " ${mongodHackedArgs[@]} " ; then
327- tlsMode=' preferTLS'
328- elif _mongod_hack_have_arg ' --sslPEMKeyFile' " ${mongodHackedArgs[@]} " ; then
329- tlsMode=' preferSSL'
330- fi
331- # 4.2 switched all configuration/flag names from "SSL" to "TLS"
332- if [ " $tlsMode " = ' preferTLS' ] || mongod --help 2>&1 | grep -q -- ' --tlsMode ' ; then
333- _mongod_hack_ensure_arg_val --tlsMode " $tlsMode " " ${mongodHackedArgs[@]} "
334- else
335- _mongod_hack_ensure_arg_val --sslMode " $tlsMode " " ${mongodHackedArgs[@]} "
336- fi
337-
338325 if stat " /proc/$$ /fd/1" > /dev/null && [ -w " /proc/$$ /fd/1" ]; then
339326 # https://github.com/mongodb/mongo/blob/38c0eb538d0fd390c6cb9ce9ae9894153f6e8ef5/src/mongo/db/initialize_server_global_state.cpp#L237-L251
340327 # https://github.com/docker-library/mongo/issues/164#issuecomment-293965668
@@ -396,17 +383,17 @@ if [ "$originalArgOne" = 'mongod' ]; then
396383 echo
397384 for f in /docker-entrypoint-initdb.d/* ; do
398385 case " $f " in
399- * .sh)
400- echo " $0 : running $f "
401- # shellcheck source=/dev/null
402- . " $f "
403- ;;
404- * .js)
405- echo " $0 : running $f "
406- " ${mongo[@]} " " $MONGO_INITDB_DATABASE " " $f "
407- echo
408- ;;
409- * ) echo " $0 : ignoring $f " ;;
386+ * .sh)
387+ echo " $0 : running $f "
388+ # shellcheck source=/dev/null
389+ . " $f "
390+ ;;
391+ * .js)
392+ echo " $0 : running $f "
393+ " ${mongo[@]} " " $MONGO_INITDB_DATABASE " " $f "
394+ echo
395+ ;;
396+ * ) echo " $0 : ignoring $f " ;;
410397 esac
411398 echo
412399 done
422409
423410if [[ $originalArgOne == mongo* ]]; then
424411 mongodHackedArgs=(" $@ " )
425- MONGO_SSL_DIR=${MONGO_SSL_DIR:-/ etc/ mongodb-ssl}
426- CA=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
427- if [ -f /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt ]; then
428- CA=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
429- fi
430- if [ -f " ${MONGO_SSL_DIR} /ca.crt" ]; then
431- CA=" ${MONGO_SSL_DIR} /ca.crt"
432- fi
433- LDAP_SSL_DIR=${LDAP_SSL_DIR:-/ etc/ openldap/ certs}
434- if [ -f " ${LDAP_SSL_DIR} /ca.crt" ]; then
435- echo " TLS_CACERT ${LDAP_SSL_DIR} /ca.crt" > /etc/openldap/ldap.conf
436- fi
437- if [ -f " ${MONGO_SSL_DIR} /tls.key" ] && [ -f " ${MONGO_SSL_DIR} /tls.crt" ]; then
438- cat " ${MONGO_SSL_DIR} /tls.key" " ${MONGO_SSL_DIR} /tls.crt" > /tmp/tls.pem
439- _mongod_hack_ensure_arg_val --sslPEMKeyFile /tmp/tls.pem " ${mongodHackedArgs[@]} "
440- if [ -f " ${CA} " ]; then
441- _mongod_hack_ensure_arg_val --sslCAFile " ${CA} " " ${mongodHackedArgs[@]} "
442- fi
412+
413+ tlsMode=" "
414+ # if --tlsMode arg is present, get it
415+ if _mongod_hack_have_arg --tlsMode " ${mongodHackedArgs[@]} " ; then
416+ tlsMode=" $( _mongod_hack_get_arg_val --tlsMode " ${mongodHackedArgs[@]} " ) "
443417 fi
444- MONGO_SSL_INTERNAL_DIR=${MONGO_SSL_INTERNAL_DIR:-/ etc/ mongodb-ssl-internal}
445- if [ -f " ${MONGO_SSL_INTERNAL_DIR} /tls.key" ] && [ -f " ${MONGO_SSL_INTERNAL_DIR} /tls.crt" ]; then
446- cat " ${MONGO_SSL_INTERNAL_DIR} /tls.key" " ${MONGO_SSL_INTERNAL_DIR} /tls.crt" > /tmp/tls-internal.pem
447- _mongod_hack_ensure_arg_val --sslClusterFile /tmp/tls-internal.pem " ${mongodHackedArgs[@]} "
448- if [ -f " ${MONGO_SSL_INTERNAL_DIR} /ca.crt" ]; then
449- _mongod_hack_ensure_arg_val --sslClusterCAFile " ${MONGO_SSL_INTERNAL_DIR} /ca.crt" " ${mongodHackedArgs[@]} "
450- fi
418+
419+ if [[ -z ${tlsMode} ]]; then
420+ # if neither --tlsMode arg or net.tls.mode is present, set it to preferTLS
421+ tlsMode=" preferTLS"
451422 fi
452423
453- # don't add --tlsMode if allowUnsafeConfigurations is true
424+ # don't add --tlsMode if TLS is disabled
454425 if clusterAuthMode=" $( _mongod_hack_get_arg_val --clusterAuthMode " ${mongodHackedArgs[@]} " ) " ; then
455426 if [[ ${clusterAuthMode} != " keyFile" ]]; then
456- tlsMode=" preferSSL"
457- # if --config arg is present, try to get tlsMode from it
458- if _parse_config " ${mongodHackedArgs[@]} " ; then
459- tlsMode=$( jq -r ' .net.tls.mode // "preferSSL"' " ${jsonConfigFile} " )
460- fi
461- _mongod_hack_ensure_arg_val --sslMode " ${tlsMode} " " ${mongodHackedArgs[@]} "
427+ _mongod_hack_ensure_arg_val --tlsMode " ${tlsMode} " " ${mongodHackedArgs[@]} "
428+ else
429+ _mongod_hack_ensure_no_arg --sslAllowInvalidCertificates " ${mongodHackedArgs[@]} "
462430 fi
463431 fi
464432
465- if [ " $MONGODB_VERSION " != ' v4.0' ]; then
466-
467- _mongod_hack_rename_arg_save_val --sslMode --tlsMode " ${mongodHackedArgs[@]} "
468-
469- if _mongod_hack_have_arg ' --tlsMode' " ${mongodHackedArgs[@]} " ; then
470- tlsMode=" none"
471- if _mongod_hack_have_arg ' allowSSL' " ${mongodHackedArgs[@]} " ; then
472- tlsMode=' allowTLS'
473- elif _mongod_hack_have_arg ' preferSSL' " ${mongodHackedArgs[@]} " ; then
474- tlsMode=' preferTLS'
475- elif _mongod_hack_have_arg ' requireSSL' " ${mongodHackedArgs[@]} " ; then
476- tlsMode=' requireTLS'
433+ if [[ ${tlsMode} != " disabled" ]]; then
434+ MONGO_SSL_DIR=${MONGO_SSL_DIR:-/ etc/ mongodb-ssl}
435+ CA=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
436+ if [ -f /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt ]; then
437+ CA=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
438+ fi
439+ if [ -f " ${MONGO_SSL_DIR} /ca.crt" ]; then
440+ CA=" ${MONGO_SSL_DIR} /ca.crt"
441+ fi
442+ if [ -f " ${MONGO_SSL_DIR} /tls.key" ] && [ -f " ${MONGO_SSL_DIR} /tls.crt" ]; then
443+ cat " ${MONGO_SSL_DIR} /tls.key" " ${MONGO_SSL_DIR} /tls.crt" > /tmp/tls.pem
444+ _mongod_hack_ensure_arg_val --sslPEMKeyFile /tmp/tls.pem " ${mongodHackedArgs[@]} "
445+ if [ -f " ${CA} " ]; then
446+ _mongod_hack_ensure_arg_val --sslCAFile " ${CA} " " ${mongodHackedArgs[@]} "
477447 fi
478-
479- if [ " $tlsMode " != " none" ]; then
480- _mongod_hack_ensure_no_arg_val --tlsMode " ${mongodHackedArgs[@]} "
481- _mongod_hack_ensure_arg_val --tlsMode " $tlsMode " " ${mongodHackedArgs[@]} "
448+ fi
449+ MONGO_SSL_INTERNAL_DIR=${MONGO_SSL_INTERNAL_DIR:-/ etc/ mongodb-ssl-internal}
450+ if [ -f " ${MONGO_SSL_INTERNAL_DIR} /tls.key" ] && [ -f " ${MONGO_SSL_INTERNAL_DIR} /tls.crt" ]; then
451+ cat " ${MONGO_SSL_INTERNAL_DIR} /tls.key" " ${MONGO_SSL_INTERNAL_DIR} /tls.crt" > /tmp/tls-internal.pem
452+ _mongod_hack_ensure_arg_val --sslClusterFile /tmp/tls-internal.pem " ${mongodHackedArgs[@]} "
453+ if [ -f " ${MONGO_SSL_INTERNAL_DIR} /ca.crt" ]; then
454+ _mongod_hack_ensure_arg_val --sslClusterCAFile " ${MONGO_SSL_INTERNAL_DIR} /ca.crt" " ${mongodHackedArgs[@]} "
482455 fi
483456 fi
484457
485- _mongod_hack_rename_arg_save_val --sslPEMKeyFile --tlsCertificateKeyFile " ${mongodHackedArgs[@]} "
486- if ! _mongod_hack_have_arg ' --tlsMode' " ${mongodHackedArgs[@]} " ; then
487- if _mongod_hack_have_arg ' --tlsCertificateKeyFile' " ${mongodHackedArgs[@]} " ; then
488- _mongod_hack_ensure_arg_val --tlsMode " preferTLS" " ${mongodHackedArgs[@]} "
489- fi
458+ LDAP_SSL_DIR=${LDAP_SSL_DIR:-/ etc/ openldap/ certs}
459+ if [ -f " ${LDAP_SSL_DIR} /ca.crt" ]; then
460+ echo " TLS_CACERT ${LDAP_SSL_DIR} /ca.crt" > /etc/openldap/ldap.conf
490461 fi
462+ fi
463+
464+ if [ " $MONGODB_VERSION " != ' v4.0' ]; then
491465 _mongod_hack_rename_arg ' --sslAllowInvalidCertificates' ' --tlsAllowInvalidCertificates' " ${mongodHackedArgs[@]} "
492466 _mongod_hack_rename_arg ' --sslAllowInvalidHostnames' ' --tlsAllowInvalidHostnames' " ${mongodHackedArgs[@]} "
493467 _mongod_hack_rename_arg ' --sslAllowConnectionsWithoutCertificates' ' --tlsAllowConnectionsWithoutCertificates' " ${mongodHackedArgs[@]} "
494468 _mongod_hack_rename_arg ' --sslFIPSMode' ' --tlsFIPSMode' " ${mongodHackedArgs[@]} "
469+ _mongod_hack_rename_arg ' --sslMode' ' --tlsMode' " ${mongodHackedArgs[@]} "
495470
496471 _mongod_hack_rename_arg_save_val --sslPEMKeyPassword --tlsCertificateKeyFilePassword " ${mongodHackedArgs[@]} "
497472 _mongod_hack_rename_arg_save_val --sslClusterFile --tlsClusterFile " ${mongodHackedArgs[@]} "
0 commit comments