1 /* authd/authd.c - main code for authd
2 * Copyright (c) 2016 William Pitcock <nenolod@dereferenced.org>
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice is present in all copies.
8 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
9 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
10 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
11 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
12 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
13 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
14 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
15 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
16 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
17 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
18 * POSSIBILITY OF SUCH DAMAGE.
26 rb_helper
*authd_helper
= NULL
;
27 authd_cmd_handler authd_cmd_handlers
[255] = {};
30 parse_request(rb_helper
*helper
)
32 static char *parv
[MAXPARA
+ 1];
33 static char readbuf
[READBUF_SIZE
];
36 authd_cmd_handler handler
;
38 while((len
= rb_helper_read(helper
, readbuf
, sizeof(readbuf
))) > 0)
40 parc
= rb_string_to_array(readbuf
, parv
, MAXPARA
);
45 handler
= authd_cmd_handlers
[parv
[0][0]];
52 error_cb(rb_helper
*helper
)
59 dummy_handler(int sig
)
72 act
.sa_handler
= SIG_IGN
;
73 sigemptyset(&act
.sa_mask
);
74 sigaddset(&act
.sa_mask
, SIGPIPE
);
75 sigaddset(&act
.sa_mask
, SIGALRM
);
77 sigaddset(&act
.sa_mask
, SIGTRAP
);
81 sigaddset(&act
.sa_mask
, SIGWINCH
);
82 sigaction(SIGWINCH
, &act
, 0);
84 sigaction(SIGPIPE
, &act
, 0);
86 sigaction(SIGTRAP
, &act
, 0);
89 act
.sa_handler
= dummy_handler
;
90 sigaction(SIGALRM
, &act
, 0);
95 main(int argc
, char *argv
[])
99 authd_helper
= rb_helper_child(parse_request
, error_cb
, NULL
, NULL
, NULL
, 256, 256, 256); /* XXX fix me */
100 if(authd_helper
== NULL
)
102 fprintf(stderr
, "authd is not meant to be invoked by end users\n");
106 rb_helper_loop(authd_helper
, 0);