1 /* ISC license. */
2 
3 #include <string.h>
4 #include <errno.h>
5 #include <skalibs/bytestr.h>
6 #include <s6/accessrules.h>
7 
s6_accessrules_keycheck_reversedns(void const * key,void * data,s6_accessrules_params_t * params,s6_accessrules_backend_func_t_ref check1)8 s6_accessrules_result_t s6_accessrules_keycheck_reversedns (void const *key, void *data, s6_accessrules_params_t *params, s6_accessrules_backend_func_t_ref check1)
9 {
10   char const *name = key ;
11   size_t len = strlen(name) ;
12   if (!len) return (errno = EINVAL, S6_ACCESSRULES_ERROR) ;
13   if (name[len-1] == '.') len-- ;
14   {
15     size_t i = 0 ;
16     char tmp[len + 11] ;
17     memcpy(tmp, "reversedns/", 11) ;
18     while (i < len)
19     {
20       s6_accessrules_result_t r ;
21       memcpy(tmp+11, name+i, len-i) ;
22       r = (*check1)(tmp, 11+len-i, data, params) ;
23       if (r != S6_ACCESSRULES_NOTFOUND) return r ;
24       i += byte_chr(name+i, len-i, '.') + 1 ;
25     }
26   }
27   return (*check1)("reversedns/@", 12, data, params) ;
28 }
29