| 
									
										
										
										
											2018-02-23 15:02:05 +00:00
										 |  |  | // Package parse contains functions that can be used in the setup code for plugins.
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | package parse
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  | 	"fmt"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-24 18:14:41 +02:00
										 |  |  | 	"github.com/coredns/caddy"
 | 
					
						
							| 
									
										
										
										
											2018-09-19 08:16:04 +01:00
										 |  |  | 	"github.com/coredns/coredns/plugin/pkg/transport"
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | // TransferIn parses transfer statements: 'transfer from [address...]'.
 | 
					
						
							|  |  |  | func TransferIn(c *caddy.Controller) (froms []string, err error) {
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 	if !c.NextArg() {
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 		return nil, c.ArgErr()
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 	}
 | 
					
						
							|  |  |  | 	value := c.Val()
 | 
					
						
							|  |  |  | 	switch value {
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 	default:
 | 
					
						
							|  |  |  | 		return nil, c.Errf("unknown property %s", value)
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 	case "from":
 | 
					
						
							| 
									
										
										
										
											2020-07-08 09:00:26 -07:00
										 |  |  | 		froms = c.RemainingArgs()
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 		if len(froms) == 0 {
 | 
					
						
							|  |  |  | 			return nil, c.ArgErr()
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 		for i := range froms {
 | 
					
						
							|  |  |  | 			if froms[i] != "*" {
 | 
					
						
							| 
									
										
										
										
											2018-09-19 08:16:04 +01:00
										 |  |  | 				normalized, err := HostPort(froms[i], transport.Port)
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 				if err != nil {
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 					return nil, err
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 				}
 | 
					
						
							|  |  |  | 				froms[i] = normalized
 | 
					
						
							|  |  |  | 			} else {
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 				return nil, fmt.Errorf("can't use '*' in transfer from")
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | 			}
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2020-09-24 11:30:39 -07:00
										 |  |  | 	return froms, nil
 | 
					
						
							| 
									
										
										
										
											2017-12-13 10:18:08 -06:00
										 |  |  | }
 |