Ajout domain + bugfix lorsque le MX ne termine pas par .

This commit is contained in:
yo
2021-01-06 09:11:00 +01:00
parent be07064a96
commit d9a3cae44d
+27 -14
View File
@@ -13,12 +13,12 @@
package main package main
import ( import (
"flag"
"fmt" "fmt"
"log" "log"
"log/syslog" "log/syslog"
"net" "net"
"os" "os"
"flag"
"strings" "strings"
"sync" "sync"
@@ -27,11 +27,11 @@ import (
) )
const ( const (
version = "0.8" version = "0.9.1"
) )
var ( var (
logstream *syslog.Writer logstream *syslog.Writer
mutex sync.Mutex mutex sync.Mutex
debug *bool debug *bool
listen *string listen *string
@@ -39,9 +39,12 @@ var (
ldapBaseDN *string ldapBaseDN *string
ldapUser *string ldapUser *string
ldapPass *string ldapPass *string
defDomain *string
) )
func handleConnection(connClt net.Conn, conLdap *ldap.Conn) { func handleConnection(connClt net.Conn, conLdap *ldap.Conn) {
var s string
var mxdom string
buf := make([]byte, 1024) buf := make([]byte, 1024)
defer connClt.Close() defer connClt.Close()
@@ -75,7 +78,11 @@ func handleConnection(connClt net.Conn, conLdap *ldap.Conn) {
mxslic := strings.Split(mxs[0].Host, ".") mxslic := strings.Split(mxs[0].Host, ".")
// les MXs terminent par '.', on le retire // les MXs terminent par '.', on le retire
mxdom := strings.Join(mxslic[len(mxslic)-3:len(mxslic)-1], ".") if mxs[0].Host[len(mxs[0].Host)-1] == '.' {
mxdom = strings.Join(mxslic[len(mxslic)-3:len(mxslic)-1], ".")
} else {
mxdom = strings.Join(mxslic[len(mxslic)-2:len(mxslic)], ".")
}
filter := fmt.Sprintf("(dc=%s)", ldap.EscapeFilter(mxdom)) filter := fmt.Sprintf("(dc=%s)", ldap.EscapeFilter(mxdom))
searchReq := ldap.NewSearchRequest(*ldapBaseDN, ldap.ScopeWholeSubtree, 0, 0, 0, searchReq := ldap.NewSearchRequest(*ldapBaseDN, ldap.ScopeWholeSubtree, 0, 0, 0,
@@ -104,7 +111,12 @@ func handleConnection(connClt net.Conn, conLdap *ldap.Conn) {
if *debug { if *debug {
logstream.Debug("Got result, returning " + result.Entries[0].Attributes[0].Values[0]) logstream.Debug("Got result, returning " + result.Entries[0].Attributes[0].Values[0])
} }
s := strings.Replace(fmt.Sprintf("FILTER relay:[%s]", result.Entries[0].Attributes[0].Values[0]), " ", "%20", -1) // Check if result is a FQDN, if not append defDomain
if strings.Contains(string(result.Entries[0].Attributes[0].Values[0]), ".") {
s = strings.Replace(fmt.Sprintf("FILTER relay:[%s]", result.Entries[0].Attributes[0].Values[0]), " ", "%20", -1)
} else {
s = strings.Replace(fmt.Sprintf("FILTER relay:[%s]", fmt.Sprintf("%s.%s", result.Entries[0].Attributes[0].Values[0], *defDomain)), " ", "%20", -1)
}
connClt.Write([]byte(fmt.Sprintf("200 %s\n", s))) connClt.Write([]byte(fmt.Sprintf("200 %s\n", s)))
} else { } else {
if *debug { if *debug {
@@ -147,14 +159,15 @@ func run() {
func main() { func main() {
var e error var e error
fs := flag.NewFlagSet("mxrouter", flag.ExitOnError) fs := flag.NewFlagSet("mxrouter", flag.ExitOnError)
listen = fs.String("listen-addr", "127.0.0.1:8080", "listen address for server (also via LISTEN env var)") listen = fs.String("listen-addr", "127.0.0.1:8080", "listen address for server (also via LISTEN env var)")
debug = fs.Bool("debug", false, "log debug information (also via DEBUG env var)") debug = fs.Bool("debug", false, "log debug information (also via DEBUG env var)")
ldapURL = fs.String("ldap", "", "LDAP Server URL (also via LDAP env var)") ldapURL = fs.String("ldap", "", "LDAP Server URL (also via LDAP env var)")
ldapBaseDN = fs.String("ldapDN", "", "LDAP base DN (also via LDAPDN env var)") ldapBaseDN = fs.String("ldapDN", "", "LDAP base DN (also via LDAPDN env var)")
ldapUser = fs.String("ldapUser", "", "LDAP user DN (also via LDAPUSER env var)") ldapUser = fs.String("ldapUser", "", "LDAP user DN (also via LDAPUSER env var)")
ldapPass = fs.String("ldapPass", "", "LDAP user password (also via LDAPPASS env var)") ldapPass = fs.String("ldapPass", "", "LDAP user password (also via LDAPPASS env var)")
_ = fs.String("config", "", "config file (optional)") defDomain = fs.String("domain", "", "Domain to add to relay name if not a FQDN (also via DOMAIN env var)")
_ = fs.String("config", "", "config file (optional)")
// Surcharge de la fonction Usage() // Surcharge de la fonction Usage()
fs.Usage = func() { fs.Usage = func() {
@@ -164,7 +177,7 @@ func main() {
} }
ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithConfigFileFlag("config"), ff.WithConfigFileParser(ff.PlainParser)) ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithConfigFileFlag("config"), ff.WithConfigFileParser(ff.PlainParser))
if len(*ldapURL) == 0 || len(*ldapBaseDN) == 0 || len (*ldapUser) == 0 || len(*ldapPass) == 0 { if len(*ldapURL) == 0 || len(*ldapBaseDN) == 0 || len(*ldapUser) == 0 || len(*ldapPass) == 0 {
fs.Usage() fs.Usage()
return return
} }