@@ -236,6 +236,17 @@ function soa_update($event_name, $data) {
236236 //* load the server configuration options
237237 $ dns_config = $ app ->getconf ->get_server_config ($ conf ["server_id " ], 'dns ' );
238238
239+ //* Get the bind version
240+ $ bind_caa = false ;
241+ $ bind = explode ("\n" , shell_exec ('which named bind ' ));
242+ $ bind = reset ($ bind );
243+ if (is_executable ($ bind )) {
244+ exec ($ bind . ' -v 2>&1 ' , $ tmp );
245+ $ bind_caa = @(version_compare ($ tmp [0 ],"BIND 9.9.6 " , '>= ' ))?true :false ;
246+ unset($ tmp );
247+ }
248+ unset($ bind );
249+
239250 //* Write the domain file
240251 if (!empty ($ data ['new ' ]['id ' ])) {
241252 $ tpl = new tpl ();
@@ -253,6 +264,19 @@ function soa_update($event_name, $data) {
253264 if ($ records [$ i ]['type ' ] == 'TXT ' && strlen ($ records [$ i ]['data ' ]) > 255 ) {
254265 $ records [$ i ]['data ' ] = implode ('" " ' ,str_split ( $ records [$ i ]['data ' ], 255 ));
255266 }
267+ //* CAA-Records - Type257 for older bind-versions
268+ if ($ records [$ i ]['type ' ] == 'CAA ' && !$ bind_caa ) {
269+ $ records [$ i ]['type ' ] = 'TYPE257 ' ;
270+ $ temp = explode (' ' , $ records [$ i ]['data ' ]);
271+ unset($ temp [0 ]);
272+ $ records [$ i ]['data ' ] = implode (' ' , $ temp );
273+ $ data_new = str_replace (array ('" ' , ' ' ), '' , $ records [$ i ]['data ' ]);
274+ $ hex = unpack ('H* ' , $ data_new );
275+ $ hex [1 ] = '0005 ' .strtoupper ($ hex [1 ]);
276+ $ length = strlen ($ hex [1 ])/2 ;
277+ $ data_new = "\# $ length $ hex [1 ]" ;
278+ $ records [$ i ]['data ' ] = $ data_new ;
279+ }
256280 }
257281 }
258282 $ tpl ->setLoop ('zones ' , $ records );
0 commit comments