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