mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Make mailer SMTP check have timed context (#24751)
Make mailer SMTP check have timed context Otherwise Gitea may block for long time if the DNS request blocks. --------- Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		| @@ -4,6 +4,7 @@ | ||||
| package setting | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"net" | ||||
| 	"net/mail" | ||||
| 	"strings" | ||||
| @@ -198,7 +199,7 @@ func loadMailerFrom(rootCfg ConfigProvider) { | ||||
| 		ips := tryResolveAddr(MailService.SMTPAddr) | ||||
| 		if MailService.Protocol == "smtp" { | ||||
| 			for _, ip := range ips { | ||||
| 				if !ip.IsLoopback() { | ||||
| 				if !ip.IP.IsLoopback() { | ||||
| 					log.Warn("connecting over insecure SMTP protocol to non-local address is not recommended") | ||||
| 					break | ||||
| 				} | ||||
| @@ -258,20 +259,21 @@ func loadNotifyMailFrom(rootCfg ConfigProvider) { | ||||
| 	log.Info("Notify Mail Service Enabled") | ||||
| } | ||||
|  | ||||
| func tryResolveAddr(addr string) []net.IP { | ||||
| func tryResolveAddr(addr string) []net.IPAddr { | ||||
| 	if strings.HasPrefix(addr, "[") && strings.HasSuffix(addr, "]") { | ||||
| 		addr = addr[1 : len(addr)-1] | ||||
| 	} | ||||
| 	ip := net.ParseIP(addr) | ||||
| 	if ip != nil { | ||||
| 		ips := make([]net.IP, 1) | ||||
| 		ips[0] = ip | ||||
| 		return ips | ||||
| 		return []net.IPAddr{{IP: ip}} | ||||
| 	} | ||||
| 	ips, err := net.LookupIP(addr) | ||||
|  | ||||
| 	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) | ||||
| 	defer cancel() | ||||
| 	ips, err := net.DefaultResolver.LookupIPAddr(ctx, addr) | ||||
| 	if err != nil { | ||||
| 		log.Warn("could not look up mailer.SMTP_ADDR: %v", err) | ||||
| 		return make([]net.IP, 0) | ||||
| 		return nil | ||||
| 	} | ||||
| 	return ips | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user