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:
		
							parent
							
								
									c367b63b7f
								
							
						
					
					
						commit
						584c0789fa
					
				
					 1 changed files with 9 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue