@@ -316,24 +316,34 @@ func rspamdTempFail(s *session, token string, log string) {
316316
317317func rspamdQuery (s * session , token string ) {
318318 var client * http.Client
319+ var req * http.Request
319320
320321 r := strings .NewReader (strings .Join (s .tx .message , "\n " ))
321322
322323 if len (unixSocketPath ) > 0 {
323- client = & http.Client {
324- Transport : & http.Transport {
325- DialContext : func (_ context.Context , _ , _ string ) (net.Conn , error ) {
326- return net .Dial ("unix" , unixSocketPath )
327- },
328- },
324+ tr := new (http.Transport )
325+ tr .DisableCompression = true
326+ tr .Dial = nil
327+ tr .DialContext = func (_ context.Context , _ , _ string ) (net.Conn , error ) {
328+ var u_addr * net.UnixAddr
329+ var err error
330+ network := "unix"
331+ u_addr , err = net .ResolveUnixAddr (network , unixSocketPath )
332+ if err != nil {
333+ rspamdTempFail (s , token , fmt .Sprintf ("failed to resolve unix path '%s': %v\n " , unixSocketPath , err ))
334+ return nil , err
335+ } else {
336+ return net .DialUnix (network , nil , u_addr )
337+ }
329338 }
339+ client = & http.Client {Transport : tr }
330340 } else {
331341 client = & http.Client {}
332342 }
333-
334- req , err : = http .NewRequest ("POST" , fmt .Sprintf ("%s/checkv2" , * rspamdURL ), r )
343+ var err error
344+ req , err = http .NewRequest ("POST" , fmt .Sprintf ("%s/checkv2" , * rspamdURL ), r )
335345 if err != nil {
336- rspamdTempFail (s , token , "failed to initialize HTTP request" )
346+ rspamdTempFail (s , token , fmt . Sprintf ( "failed to initialize HTTP request. err: '%s'" , err ) )
337347 return
338348 }
339349
@@ -370,15 +380,15 @@ func rspamdQuery(s *session, token string) {
370380
371381 resp , err := client .Do (req )
372382 if err != nil {
373- rspamdTempFail (s , token , "failed to receive a response from daemon" )
383+ rspamdTempFail (s , token , fmt . Sprintf ( "failed to receive a response from daemon. err: '%s'" , err ) )
374384 return
375385 }
376386
377387 defer resp .Body .Close ()
378388
379389 rr := & rspamd {}
380390 if err := json .NewDecoder (resp .Body ).Decode (rr ); err != nil {
381- rspamdTempFail (s , token , "failed to decode JSON response" )
391+ rspamdTempFail (s , token , fmt . Sprintf ( "failed to decode JSON response, err: '%s'" , err ) )
382392 return
383393 }
384394
@@ -563,6 +573,7 @@ func trigger(actions map[string]func(*session, []string), atoms []string) {
563573func skipConfig (scanner * bufio.Scanner ) {
564574 for {
565575 if ! scanner .Scan () {
576+ log .Print ("no more lines to scan for skipping. exiting..." )
566577 os .Exit (0 )
567578 }
568579 line := scanner .Text ()
@@ -578,20 +589,48 @@ func main() {
578589
579590 flag .Parse ()
580591
581- if strings .HasPrefix (* rspamdURL , "/" ) {
592+ if err := PledgePromises ("stdio rpath inet dns unix unveil" ); err != nil {
593+ log .Fatalf ("pledge promise err: %s" , err )
594+ }
595+
596+ if err := Unveil ("/etc/resolv.conf" , "r" ); err != nil {
597+ log .Fatalf ("unveil resolv err: %s" , err )
598+ }
599+
600+ if err := Unveil ("/etc/hosts" , "r" ); err != nil {
601+ log .Fatalf ("unveil hosts err: %s" , err )
602+ }
603+
604+ if ! strings .HasPrefix (* rspamdURL , "http" ) {
582605 unixSocketPath = * rspamdURL
583606 * rspamdURL = "http://localhost"
607+
608+ if err := Unveil (unixSocketPath , "rw" ); err != nil {
609+ log .Fatalf ("unveil '%s' err: %s" , unixSocketPath , err )
610+ }
611+
612+ if _ , err := os .Stat (unixSocketPath ); err != nil {
613+ log .Fatalf ("unix socket stat '%s' err: '%s'" , unixSocketPath , err )
614+ }
615+
616+ c , err := net .Dial ("unix" , unixSocketPath )
617+ if err != nil {
618+ log .Fatalf ("unix socket connect '%s' err: '%s'" , unixSocketPath , err )
619+ }
620+ c .Close ()
584621 }
585622
586- PledgePromises ("stdio rpath inet dns unix unveil" )
587- Unveil ("/etc/resolv.conf" , "r" )
588- Unveil ("/etc/hosts" , "r" )
589- UnveilBlock ()
623+ if err := UnveilBlock (); err != nil {
624+ log .Fatalf ("unveil block err: %s" , err )
625+ }
590626
627+ log .Println ("reading line scanner" )
591628 scanner := bufio .NewScanner (os .Stdin )
592629
630+ log .Println ("reading lines until ready" )
593631 skipConfig (scanner )
594632
633+ log .Println ("responding desired filters" )
595634 filterInit ()
596635
597636 outputChannel = make (chan string )
@@ -601,15 +640,18 @@ func main() {
601640 }
602641 }()
603642
643+ atom_len := 6
644+
604645 for {
605646 if ! scanner .Scan () {
647+ log .Print ("no more lines to scan. exiting..." )
606648 os .Exit (0 )
607649 }
608650
609651 line := scanner .Text ()
610652 atoms := strings .Split (line , "|" )
611- if len (atoms ) < 6 {
612- log .Fatalf ("missing atoms: %s" , line )
653+ if len (atoms ) < atom_len {
654+ log .Fatalf ("missing atoms. expected %d. got %d : %s" , atom_len , len ( atoms ) , line )
613655 }
614656
615657 version = atoms [1 ]
0 commit comments