@@ -22,6 +22,7 @@ import (
22
22
"errors"
23
23
"fmt"
24
24
"io"
25
+ "io/fs"
25
26
"log"
26
27
"net"
27
28
"net/http"
@@ -423,24 +424,12 @@ func cmdAdaptConfig(fl Flags) (int, error) {
423
424
adaptCmdPrettyFlag := fl .Bool ("pretty" )
424
425
adaptCmdValidateFlag := fl .Bool ("validate" )
425
426
426
- // if no input file was specified, try a default
427
- // Caddyfile if the Caddyfile adapter is plugged in
428
- if adaptCmdInputFlag == "" && caddyconfig .GetAdapter ("caddyfile" ) != nil {
429
- _ , err := os .Stat ("Caddyfile" )
430
- if err == nil {
431
- // default Caddyfile exists
432
- adaptCmdInputFlag = "Caddyfile"
433
- caddy .Log ().Info ("using adjacent Caddyfile" )
434
- } else if ! os .IsNotExist (err ) {
435
- // default Caddyfile exists, but error accessing it
436
- return caddy .ExitCodeFailedStartup , fmt .Errorf ("accessing default Caddyfile: %v" , err )
437
- }
427
+ var err error
428
+ adaptCmdInputFlag , err = configFileWithRespectToDefault (caddy .Log (), adaptCmdInputFlag )
429
+ if err != nil {
430
+ return caddy .ExitCodeFailedStartup , err
438
431
}
439
432
440
- if adaptCmdInputFlag == "" {
441
- return caddy .ExitCodeFailedStartup ,
442
- fmt .Errorf ("input file required when there is no Caddyfile in current directory (use --config flag)" )
443
- }
444
433
if adaptCmdAdapterFlag == "" {
445
434
return caddy .ExitCodeFailedStartup ,
446
435
fmt .Errorf ("adapter name is required (use --adapt flag or leave unspecified for default)" )
@@ -517,6 +506,17 @@ func cmdValidateConfig(fl Flags) (int, error) {
517
506
}
518
507
}
519
508
509
+ // use default config and ensure a config file is specified
510
+ var err error
511
+ validateCmdConfigFlag , err = configFileWithRespectToDefault (caddy .Log (), validateCmdConfigFlag )
512
+ if err != nil {
513
+ return caddy .ExitCodeFailedStartup , err
514
+ }
515
+ if validateCmdConfigFlag == "" {
516
+ return caddy .ExitCodeFailedStartup ,
517
+ fmt .Errorf ("input file required when there is no Caddyfile in current directory (use --config flag)" )
518
+ }
519
+
520
520
input , _ , err := LoadConfig (validateCmdConfigFlag , validateCmdAdapterFlag )
521
521
if err != nil {
522
522
return caddy .ExitCodeFailedStartup , err
@@ -736,6 +736,31 @@ func DetermineAdminAPIAddress(address string, config []byte, configFile, configA
736
736
return caddy .DefaultAdminListen , nil
737
737
}
738
738
739
+ // configFileWithRespectToDefault returns the filename to use for loading the config, based
740
+ // on whether a config file is already specified and a supported default config file exists.
741
+ func configFileWithRespectToDefault (logger * zap.Logger , configFile string ) (string , error ) {
742
+ const defaultCaddyfile = "Caddyfile"
743
+
744
+ // if no input file was specified, try a default Caddyfile if the Caddyfile adapter is plugged in
745
+ if configFile == "" && caddyconfig .GetAdapter ("caddyfile" ) != nil {
746
+ _ , err := os .Stat (defaultCaddyfile )
747
+ if err == nil {
748
+ // default Caddyfile exists
749
+ if logger != nil {
750
+ logger .Info ("using adjacent Caddyfile" )
751
+ }
752
+ return defaultCaddyfile , nil
753
+ }
754
+ if ! errors .Is (err , fs .ErrNotExist ) {
755
+ // problem checking
756
+ return configFile , fmt .Errorf ("checking if default Caddyfile exists: %v" , err )
757
+ }
758
+ }
759
+
760
+ // default config file does not exist or is irrelevant
761
+ return configFile , nil
762
+ }
763
+
739
764
type moduleInfo struct {
740
765
caddyModuleID string
741
766
goModule * debug.Module
0 commit comments