/* ISC license. */ #include #include #include #include #include int main (int argc, char const *const *argv, char const *const *envp) { char const *x ; unsigned int protolen ; PROG = "s6-connlimit" ; x = env_get2(envp, "PROTO") ; if (!x) strerr_dienotset(100, "PROTO") ; protolen = str_len(x) ; if (!protolen) strerr_dief1x(100, "empty PROTO") ; { unsigned int num ; char s[protolen + 8] ; byte_copy(s, protolen, x) ; byte_copy(s + protolen, 8, "CONNNUM") ; x = env_get2(envp, s) ; if (!x) strerr_dienotset(100, s) ; if (!uint0_scan(x, &num)) strerr_dief2x(100, "invalid ", s) ; byte_copy(s + protolen + 4, 4, "MAX") ; x = env_get2(envp, s) ; if (x) { unsigned int max ; if (!uint0_scan(x, &max)) strerr_dief2x(100, "invalid ", s) ; if (num > max) strerr_dief2x(1, "number of connections from this client limited to ", x) ; } } pathexec0_run(argv+1, envp) ; (void)argc ; strerr_dieexec(111, argv[1]) ; }