@@ -26,7 +26,7 @@ public static function createNameserversArray($params, $apiHelper = null)
2626 // }
2727
2828 if ($ params ['test_mode ' ] == 'on ' && $ apiHelper != null ) {
29-
29+
3030 for ($ i = 1 ; $ i <= 5 ; $ i ++) {
3131 $ ns = $ params ["ns {$ i }" ];
3232 if (!$ ns ) {
@@ -36,6 +36,16 @@ public static function createNameserversArray($params, $apiHelper = null)
3636 $ nsName = trim ($ nsParts [0 ]);
3737 $ nsIp = empty ($ nsParts [1 ]) ? null : trim ($ nsParts [1 ]);
3838
39+ // Glue records (NS is a child of the domain) require an IP.
40+ // External nameservers must be accepted as-is without IP lookup.
41+ $ domainFqdn = strtolower ($ params ['sld ' ] . '. ' . $ params ['tld ' ]);
42+ $ isGlue = str_ends_with (strtolower ($ nsName ), '. ' . $ domainFqdn );
43+
44+ if (!$ isGlue ) {
45+ $ nameServers [] = new \OpenProvider \API \DomainNameServer (['name ' => $ nsName ]);
46+ continue ;
47+ }
48+
3949 //Try to get IP from searchNsRequest in REST API
4050 if (empty ($ nsIp )) {
4151 $ myNameServerList = $ apiHelper ->getNameserverList ($ nsName );
@@ -52,9 +62,12 @@ public static function createNameserversArray($params, $apiHelper = null)
5262 $ nsIp = gethostbyname ($ nsName );
5363 if (!filter_var ($ nsIp , FILTER_VALIDATE_IP , FILTER_FLAG_IPV4 )) {
5464 $ nsIp = "" ;
55- throw new \Exception ("Invalid nameserver name: {$ nsName }" );
65+ throw new \Exception (
66+ "Could not resolve IP for glue record nameserver ' {$ nsName }'. "
67+ . "Please register it in OpenProvider before initiating the transfer. "
68+ );
5669 }
57- }
70+ }
5871
5972 if (!empty ($ nsIp ) && !empty ($ nsName )) {
6073 $ nameServers [] = new \OpenProvider \API \DomainNameServer (array (
@@ -65,13 +78,13 @@ public static function createNameserversArray($params, $apiHelper = null)
6578 }
6679
6780 if (count ($ nameServers ) < 2 ) {
68- throw new \Exception ('You must enter minimum 2 nameservers ' );
81+ throw new \Exception ('You must provide at least 2 nameservers. ' );
6982 }
7083
7184 return $ nameServers ;
7285 }
7386
74- $ invalidNameServer = false ;
87+ $ invalidGlueNameServers = [] ;
7588 for ($ i = 1 ; $ i <= 5 ; $ i ++) {
7689 $ ns = $ params ["ns {$ i }" ];
7790 if (!$ ns ) {
@@ -82,6 +95,16 @@ public static function createNameserversArray($params, $apiHelper = null)
8295 $ nsName = trim ($ nsParts [0 ]);
8396 $ nsIp = empty ($ nsParts [1 ]) ? null : trim ($ nsParts [1 ]);
8497
98+ // Glue records (NS is a child of the domain) require an IP.
99+ // External nameservers must be accepted as-is without IP lookup.
100+ $ domainFqdn = strtolower ($ params ['sld ' ] . '. ' . $ params ['tld ' ]);
101+ $ isGlue = str_ends_with (strtolower ($ nsName ), '. ' . $ domainFqdn );
102+
103+ if (!$ isGlue ) {
104+ $ nameServers [] = new \OpenProvider \API \DomainNameServer (['name ' => $ nsName ]);
105+ continue ;
106+ }
107+
85108 if (empty ($ nsIp )) {
86109 $ api = new \OpenProvider \API \API ();
87110 $ api ->setParams ($ params );
@@ -99,8 +122,8 @@ public static function createNameserversArray($params, $apiHelper = null)
99122 $ nsIp = gethostbyname ($ nsName );
100123 if (!filter_var ($ nsIp , FILTER_VALIDATE_IP , FILTER_FLAG_IPV4 )) {
101124 $ nsIp = "" ;
102- $ invalidNameServer = true ;
103- logModuleCall ('openprovider ' , 'createNameserversArray ' , $ nsName , "Invalid nameserver name : {$ nsName }" , null , null );
125+ $ invalidGlueNameServers [] = $ nsName ;
126+ logModuleCall ('openprovider ' , 'createNameserversArray ' , $ nsName , "Could not resolve IP for glue record nameserver : {$ nsName }" , null , null );
104127 }
105128 }
106129
@@ -113,11 +136,14 @@ public static function createNameserversArray($params, $apiHelper = null)
113136 }
114137
115138 if (count ($ nameServers ) < 2 ) {
116- if ($ invalidNameServer ) {
117- throw new \Exception ('You must enter minimum 2 nameservers. Invalid nameserver found. Please check the module log. ' );
118- }else {
119- throw new \Exception ('You must enter minimum 2 nameservers ' );
120- }
139+ if (!empty ($ invalidGlueNameServers )) {
140+ $ names = implode (', ' , $ invalidGlueNameServers );
141+ throw new \Exception (
142+ "Could not resolve IP for glue record nameserver(s): {$ names }. "
143+ . "Please register them in OpenProvider before initiating the transfer. "
144+ );
145+ }
146+ throw new \Exception ('You must provide at least 2 nameservers. ' );
121147 }
122148
123149 return $ nameServers ;
0 commit comments