1
1
#! /bin/bash
2
2
set -Eeuo pipefail
3
+ set -o xtrace
3
4
4
5
if [ " ${1: 0: 1} " = ' -' ]; then
5
6
set -- mongod " $@ "
@@ -68,9 +69,9 @@ _mongod_hack_have_arg() {
68
69
local arg
69
70
for arg; do
70
71
case " $arg " in
71
- " $checkArg " | " $checkArg " =* )
72
- return 0
73
- ;;
72
+ " $checkArg " | " $checkArg " =* )
73
+ return 0
74
+ ;;
74
75
esac
75
76
done
76
77
return 1
@@ -83,14 +84,14 @@ _mongod_hack_get_arg_val() {
83
84
local arg=" $1 "
84
85
shift
85
86
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
+ ;;
94
95
esac
95
96
done
96
97
return 1
@@ -131,14 +132,14 @@ _mongod_hack_ensure_no_arg_val() {
131
132
local arg=" $1 "
132
133
shift
133
134
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
+ ;;
142
143
esac
143
144
mongodHackedArgs+=(" $arg " )
144
145
done
@@ -282,10 +283,10 @@ if [ "$originalArgOne" = 'mongod' ]; then
282
283
# if we've got any /docker-entrypoint-initdb.d/* files to parse later, we should initdb
283
284
for f in /docker-entrypoint-initdb.d/* ; do
284
285
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
+ ;;
289
290
esac
290
291
done
291
292
fi
@@ -321,20 +322,6 @@ if [ "$originalArgOne" = 'mongod' ]; then
321
322
_mongod_hack_ensure_no_arg_val --replSet " ${mongodHackedArgs[@]} "
322
323
fi
323
324
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
-
338
325
if stat " /proc/$$ /fd/1" > /dev/null && [ -w " /proc/$$ /fd/1" ]; then
339
326
# https://github.com/mongodb/mongo/blob/38c0eb538d0fd390c6cb9ce9ae9894153f6e8ef5/src/mongo/db/initialize_server_global_state.cpp#L237-L251
340
327
# https://github.com/docker-library/mongo/issues/164#issuecomment-293965668
@@ -396,17 +383,17 @@ if [ "$originalArgOne" = 'mongod' ]; then
396
383
echo
397
384
for f in /docker-entrypoint-initdb.d/* ; do
398
385
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 " ;;
410
397
esac
411
398
echo
412
399
done
422
409
423
410
if [[ $originalArgOne == mongo* ]]; then
424
411
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[@]} " ) "
443
417
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"
451
422
fi
452
423
453
- # don't add --tlsMode if allowUnsafeConfigurations is true
424
+ # don't add --tlsMode if TLS is disabled
454
425
if clusterAuthMode=" $( _mongod_hack_get_arg_val --clusterAuthMode " ${mongodHackedArgs[@]} " ) " ; then
455
426
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[@]} "
462
430
fi
463
431
fi
464
432
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[@]} "
477
447
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[@]} "
482
455
fi
483
456
fi
484
457
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
490
461
fi
462
+ fi
463
+
464
+ if [ " $MONGODB_VERSION " != ' v4.0' ]; then
491
465
_mongod_hack_rename_arg ' --sslAllowInvalidCertificates' ' --tlsAllowInvalidCertificates' " ${mongodHackedArgs[@]} "
492
466
_mongod_hack_rename_arg ' --sslAllowInvalidHostnames' ' --tlsAllowInvalidHostnames' " ${mongodHackedArgs[@]} "
493
467
_mongod_hack_rename_arg ' --sslAllowConnectionsWithoutCertificates' ' --tlsAllowConnectionsWithoutCertificates' " ${mongodHackedArgs[@]} "
494
468
_mongod_hack_rename_arg ' --sslFIPSMode' ' --tlsFIPSMode' " ${mongodHackedArgs[@]} "
469
+ _mongod_hack_rename_arg ' --sslMode' ' --tlsMode' " ${mongodHackedArgs[@]} "
495
470
496
471
_mongod_hack_rename_arg_save_val --sslPEMKeyPassword --tlsCertificateKeyFilePassword " ${mongodHackedArgs[@]} "
497
472
_mongod_hack_rename_arg_save_val --sslClusterFile --tlsClusterFile " ${mongodHackedArgs[@]} "
0 commit comments