78 |
78 |
static void set_blockmode(int socket, int cmd);
|
79 |
79 |
struct command * match_command(struct command *target, char *wordpassed);
|
80 |
80 |
struct command * parse_command(int fd, int argc, char **argv);
|
81 |
|
static void socket_read_command(int socket, short event, void *arg);
|
|
81 |
static void socket_read_command(int socket);
|
82 |
82 |
static void show_command_list(int fd, const struct command *list);
|
83 |
83 |
static void socket_accept_command(int socket, short event, void *arg);
|
84 |
|
static void socket_close_command(int fd, struct event *ev);
|
85 |
84 |
static void socket_read_fcgi(int, short, void *);
|
86 |
85 |
static void fcgi_send_command(int, short, void *);
|
87 |
86 |
static int fcgi_open_socket(struct runq *);
|
... | ... | |
528 |
527 |
}
|
529 |
528 |
|
530 |
529 |
static void
|
531 |
|
socket_close_command(int fd, struct event *ev)
|
532 |
|
{
|
533 |
|
event_del(ev);
|
534 |
|
free(ev);
|
535 |
|
close(fd);
|
536 |
|
}
|
537 |
|
|
538 |
|
static void
|
539 |
530 |
socket_read_fcgi(int fd, short event, void *arg)
|
540 |
531 |
{
|
541 |
532 |
struct runq *tmpcmd = arg;
|
... | ... | |
623 |
614 |
}
|
624 |
615 |
|
625 |
616 |
static void
|
626 |
|
socket_read_command(int fd, short event, void *arg)
|
|
617 |
socket_read_command(int fd)
|
627 |
618 |
{
|
628 |
619 |
struct command *cmd;
|
629 |
|
struct event *ev = arg;
|
630 |
620 |
enum { bufsize = 2048 };
|
631 |
621 |
char buf[bufsize];
|
632 |
622 |
register int n;
|
633 |
623 |
char **ap, *argv[bufsize], *p;
|
634 |
624 |
int i, loop = 0;
|
635 |
625 |
|
636 |
|
if (event == EV_TIMEOUT) {
|
637 |
|
socket_close_command(fd, ev);
|
638 |
|
return;
|
639 |
|
}
|
640 |
|
|
641 |
626 |
tryagain:
|
642 |
627 |
bzero(buf, sizeof(buf));
|
643 |
628 |
if ((n = read (fd, buf, bufsize)) == -1) {
|
... | ... | |
663 |
648 |
for (i = 0; i < n - 1; i++) {
|
664 |
649 |
if (!isalpha(buf[i]) && !isspace(buf[i]) && !isdigit(buf[i]) && !ispunct(buf[i])) {
|
665 |
650 |
write(fd, "ERROR:\tonly alphanumeric chars allowd", 37);
|
666 |
|
socket_close_command(fd, ev);
|
|
651 |
close(fd);
|
667 |
652 |
return;
|
668 |
653 |
}
|
669 |
654 |
}
|
... | ... | |
696 |
681 |
socket_accept_command(int fd, __unused short event, __unused void *arg)
|
697 |
682 |
{
|
698 |
683 |
struct sockaddr_un sun;
|
699 |
|
struct timeval tv = { 10, 0 };
|
700 |
|
struct event *ev;
|
701 |
684 |
socklen_t len;
|
702 |
685 |
int newfd;
|
703 |
686 |
|
... | ... | |
708 |
691 |
}
|
709 |
692 |
set_blockmode(newfd, O_NONBLOCK | FD_CLOEXEC);
|
710 |
693 |
|
711 |
|
if ((ev = malloc(sizeof(*ev))) == NULL) {
|
712 |
|
syslog(LOG_ERR, "Cannot allocate new struct event.");
|
713 |
|
close(newfd);
|
714 |
|
return;
|
715 |
|
}
|
716 |
|
|
717 |
|
event_set(ev, newfd, EV_READ | EV_PERSIST, socket_read_command, ev);
|
718 |
|
event_add(ev, &tv);
|
|
694 |
socket_read_command(newfd);
|
719 |
695 |
}
|
720 |
696 |
|
721 |
697 |
static void
|