1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/* ISC license. */
#include <skalibs/uint.h>
#include <skalibs/bytestr.h>
#include <skalibs/strerr2.h>
#include <skalibs/env.h>
#include <skalibs/djbunix.h>
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]) ;
}
|