@@ -104,9 +104,15 @@ function onShowEnd() {
104104 $ temp = explode ('; ' , $ old_data );
105105 foreach ($ temp as $ part ) {
106106 if (preg_match ("/^p=/ " , $ part )) $ dmarc_policy = str_replace ('p= ' , '' , $ part );
107- if (preg_match ("/^rua=/ " , $ part )) $ dmarc_rua = str_replace ('rua=mailto: ' , '' , $ part ).' ' ;
108- if (preg_match ("/^ruf=/ " , $ part )) $ dmarc_ruf = str_replace ('ruf=mailto: ' , '' , $ part ).' ' ;
109- if (preg_match ("/^fo:/ " , $ part )) $ dmarc_fo = str_replace ('fo: ' , '' , $ part );
107+ if (preg_match ("/^rua=/ " , $ part )) {
108+ $ dmarc_rua = str_replace (array ('rua= ' ,'mailto: ' ), '' , $ part ).' ' ;
109+ $ dmarc_rua = str_replace (', ' , ' ' , $ dmarc_rua );
110+ }
111+ if (preg_match ("/^ruf=/ " , $ part )) {
112+ $ dmarc_ruf = str_replace (array ('ruf= ' ,'mailto: ' ), '' , $ part ).' ' ;
113+ $ dmarc_ruf = str_replace (', ' , ' ' , $ dmarc_ruf );
114+ }
115+ if (preg_match ("/^fo=/ " , $ part )) $ dmarc_fo = str_replace ('fo= ' , '' , $ part );
110116 if (preg_match ("/^adkim=/ " , $ part )) $ dmarc_adkim = str_replace ('adkim= ' , '' , $ part );
111117 if (preg_match ("/^aspf=/ " , $ part )) $ dmarc_aspf = str_replace ('aspf= ' , '' , $ part );
112118 if (preg_match ("/^rf=/ " , $ part )) $ dmarc_rf = str_replace ('rf= ' , '' , $ part );
@@ -137,10 +143,10 @@ function onShowEnd() {
137143 if (!empty ($ dmarc_ruf )) $ app ->tpl ->setVar ("dmarc_ruf " , $ dmarc_ruf );
138144
139145 //set dmarc-fo-options
140- $ temp = explode ( ' : ' , $ dmarc_fo );
141- if ( is_array ( $ temp ))
146+ if ( isset ( $ dmarc_fo )) {
147+ $ temp = explode ( ' : ' , $ dmarc_fo );
142148 foreach ($ temp as $ fo => $ value ) $ app ->tpl ->setVar ("dmarc_fo " .$ value , 'CHECKED ' );
143- else
149+ } else
144150 $ app ->tpl ->setVar ("dmarc_fo0 " , 'CHECKED ' );
145151
146152 unset($ temp );
@@ -277,63 +283,53 @@ function onSubmit() {
277283 //create dmarc-record
278284 $ dmarc_record [] = 'p= ' .$ this ->dataRecord ['dmarc_policy ' ];
279285
280- /* TODO:
281- draft-kucherawy-dmarc-base-07 allows multiple rua and ruf-entries
282- */
283- $ dmarc_rua = trim ($ this ->dataRecord ['dmarc_rua ' ]);
284- if (!empty ($ dmarc_rua )) {
285- if (!filter_var ($ dmarc_rua , FILTER_VALIDATE_EMAIL )) {
286- if (isset ($ app ->tform ->errorMessage )) $ app ->tform ->errorMessage = '<br/> ' . $ app ->tform ->errorMessage ;
287- $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_email_txt ' ].$ dmarc_rua ;
288- } else {
289- /* TODO:
290- allow an external report-address. this requieres changes in a remote zone.
291- */
292- $ mail_domain = explode ('@ ' , $ dmarc_rua );
293- if ($ mail_domain [1 ] != $ domain_name ) {
286+ if (!empty ($ this ->dataRecord ['dmarc_rua ' ])) {
287+ $ dmarc_rua = explode (' ' , $ this ->dataRecord ['dmarc_rua ' ]);
288+ $ dmarc_rua = array_filter ($ dmarc_rua );
289+ foreach ($ dmarc_rua as $ rec ) {
290+ if (!filter_var ($ rec , FILTER_VALIDATE_EMAIL )) {
294291 if (isset ($ app ->tform ->errorMessage )) $ app ->tform ->errorMessage = '<br/> ' . $ app ->tform ->errorMessage ;
295- $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_domain_txt ' ].$ dmarc_ruf . ' in ' . $ dmarc_ruf ;
292+ $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_email_txt ' ].$ dmarc_rua ;
296293 } else {
297- $ dmarc_record [] = 'rua= mailto: ' .$ dmarc_rua ;
294+ $ temp . = 'mailto: ' .$ rec . ' , ' ;
298295 }
299296 }
297+ $ dmarc_record [] = 'rua= ' .rtrim ($ temp , ', ' );
298+ unset ($ dmarc_rua );
299+ unset($ temp );
300300 }
301- unset ($ dmarc_rua );
302- unset ($ mail_domain );
303-
304- $ dmarc_ruf = trim ($ this ->dataRecord ['dmarc_ruf ' ]);
305- if (!empty ($ dmarc_ruf )) {
306- if (!filter_var ($ dmarc_ruf , FILTER_VALIDATE_EMAIL )) {
307- if (isset ($ app ->tform ->errorMessage )) $ app ->tform ->errorMessage = '<br/> ' . $ app ->tform ->errorMessage ;
308- $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_email_txt ' ].$ dmarc_ruf ;
309- } else {
310- /* TODO:
311- allow an external report-address. this requieres changes in a remote zone.
312- */
313- $ mail_domain [1 ] = explode ('@ ' , $ dmarc_ruf );
314- if ($ mail_domain != $ domain_name ) {
301+
302+ if (!empty ($ this ->dataRecord ['dmarc_ruf ' ])) {
303+ $ dmarc_ruf = explode (' ' , $ this ->dataRecord ['dmarc_ruf ' ]);
304+ $ dmarc_ruf = array_filter ($ dmarc_ruf );
305+ foreach ($ dmarc_ruf as $ rec ) {
306+ if (!filter_var ($ rec , FILTER_VALIDATE_EMAIL )) {
315307 if (isset ($ app ->tform ->errorMessage )) $ app ->tform ->errorMessage = '<br/> ' . $ app ->tform ->errorMessage ;
316- $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_domain_txt ' ].$ dmarc_ruf . ' in ' . $ dmarc_ruf ;
308+ $ app ->tform ->errorMessage .= $ app ->tform ->wordbook ['dmarc_invalid_email_txt ' ].$ dmarc_rua ;
317309 } else {
318- $ dmarc_record [] = 'ruf= mailto: ' .$ dmarc_ruf ;
310+ $ temp . = 'mailto: ' .$ rec . ' , ' ;
319311 }
320312 }
313+ $ dmarc_record [] = 'ruf= ' .rtrim ($ temp , ', ' );
314+ unset ($ dmarc_ruf );
315+ unset($ temp );
321316 }
322- unset ($ dmarc_ruf );
323- unset ($ mail_domain );
324317
325318 $ fo_rec = '' ;
326319 if (isset ($ this ->dataRecord ['dmarc_fo0 ' ])) $ fo_rec [] = '0 ' ;
327320 if (isset ($ this ->dataRecord ['dmarc_fo1 ' ])) $ fo_rec [] = '1 ' ;
328321 if (isset ($ this ->dataRecord ['dmarc_fod ' ])) $ fo_rec [] = 'd ' ;
329322 if (isset ($ this ->dataRecord ['dmarc_fos ' ])) $ fo_rec [] = 's ' ;
330- if (is_array ($ fo_rec ) && !empty ($ fo_rec ))
331- $ dmarc_record [] = 'fo: ' .implode (': ' , $ fo_rec );
323+ if (is_array ($ fo_rec ) && !empty ($ fo_rec )) {
324+ $ rec = 'fo= ' .implode (': ' , $ fo_rec );
325+ if ($ rec != 'fo=0 ' ) $ dmarc_record [] = 'fo= ' .implode (': ' , $ fo_rec );
326+ unset($ rec );
327+ }
332328
333- if (! empty ( $ this -> dataRecord [ ' dmarc_adkim ' ]) && $ this ->dataRecord ['dmarc_adkim ' ] != 'r ' )
329+ if ($ this ->dataRecord ['dmarc_adkim ' ] != 'r ' )
334330 $ dmarc_record [] = 'adkim= ' .$ this ->dataRecord ['dmarc_adkim ' ];
335331
336- if (! empty ( $ this -> dataRecord [ ' dmarc_aspf ' ]) && $ this ->dataRecord ['dmarc_aspf ' ] != 'r ' )
332+ if ($ this ->dataRecord ['dmarc_aspf ' ] != 'r ' )
337333 $ dmarc_record [] = 'aspf= ' .$ this ->dataRecord ['dmarc_aspf ' ];
338334
339335 if (isset ($ this ->dataRecord ['dmarc_rf_afrf ' ]) && isset ($ this ->dataRecord ['dmarc_rf_iodef ' ]))
0 commit comments