summaryrefslogtreecommitdiff
path: root/accel-pptpd/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pptpd/main.c')
-rw-r--r--accel-pptpd/main.c201
1 files changed, 0 insertions, 201 deletions
diff --git a/accel-pptpd/main.c b/accel-pptpd/main.c
deleted file mode 100644
index 5a02685..0000000
--- a/accel-pptpd/main.c
+++ /dev/null
@@ -1,201 +0,0 @@
-#include <signal.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/resource.h>
-
-#include "triton/triton.h"
-
-#include "memdebug.h"
-#include "log.h"
-#include "events.h"
-
-static int goto_daemon;
-static char *pid_file;
-static char *conf_file;
-
-#define ARG_MAX 128
-static int parse_cmdline(char ***argv)
-{
- FILE *f;
- int i;
- size_t len;
-
- f = fopen("/proc/self/cmdline", "r");
- if (!f) {
- perror("open cmdline");
- _exit(EXIT_FAILURE);
- }
-
- *argv = _malloc(ARG_MAX * sizeof(void *));
- memset(*argv, 0, ARG_MAX * sizeof(void *));
-
- for(i = 0; i < ARG_MAX; i++) {
- len = 0;
- if (getdelim(&(*argv)[i], &len, 0, f) < 0)
- break;
- }
-
- fclose(f);
-
- return i;
-}
-static void __init __main(void)
-{
- int i,argc;
- char **argv;
-
- argc=parse_cmdline(&argv);
-
- if (argc < 2)
- goto usage;
-
- for(i = 1; i < argc; i++) {
- if (!strcmp(argv[i], "-d"))
- goto_daemon = 1;
- else if (!strcmp(argv[i], "-p")) {
- if (i == argc - 1)
- goto usage;
- pid_file = argv[++i];
- } else if (!strcmp(argv[i], "-c")) {
- if (i == argc - 1)
- goto usage;
- conf_file = argv[++i];
- }
- }
-
- if (!conf_file)
- goto usage;
-
- if (triton_init(conf_file))
- _exit(EXIT_FAILURE);
-
- return;
-
-usage:
- printf("usage: pptpd [-d] [-p <file>] -c <file>\n\
- where:\n\
- -d - daemon mode\n\
- -p - write pid to <file>\n\
- -c - config file\n");
- _exit(EXIT_FAILURE);
-}
-
-static void change_limits(void)
-{
- FILE *f;
- struct rlimit lim;
- unsigned int file_max;
-
- f = fopen("/proc/sys/fs/file-max", "r");
- if (f) {
- fscanf(f, "%d", &file_max);
- fclose(f);
-
- lim.rlim_cur = file_max;
- lim.rlim_max = file_max;
- if (setrlimit(RLIMIT_NOFILE, &lim))
- log_emerg("main: setrlimit: %s\n", strerror(errno));
- } else
- log_emerg("main: failed to open '/proc/sys/fs/file-max': %s\n", strerror(errno));
-}
-
-static void config_reload_notify(int r)
-{
- if (!r)
- triton_event_fire(EV_CONFIG_RELOAD, NULL);
-}
-static void config_reload(int num)
-{
- triton_conf_reload(config_reload_notify);
-}
-
-int main(int argc, char **argv)
-{
- sigset_t set;
- int sig;
-
- if (goto_daemon) {
- /*pid_t pid = fork();
- if (pid > 0)
- _exit(EXIT_SUCCESS);
- if (pid < 0) {
- perror("fork");
- return EXIT_FAILURE;
- }
- if (setsid() < 0)
- _exit(EXIT_FAILURE);
- pid = fork();
- if (pid)
- _exit(0);
- umask(0);
- chdir("/");
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);*/
- daemon(0, 0);
- }
-
- if (pid_file) {
- FILE *f = fopen(pid_file, "w");
- if (f) {
- fprintf(f, "%i", getpid());
- fclose(f);
- }
- }
-
- //signal(SIGTERM, sigterm);
- //signal(SIGPIPE, sigterm);
-
- change_limits();
-
- if (triton_load_modules("modules"))
- return EXIT_FAILURE;
-
- log_msg("accel-pptp version %s\n", ACCEL_PPTP_VERSION);
-
- triton_run();
-
- sigfillset(&set);
-
- struct sigaction sa = {
- .sa_handler = config_reload,
- .sa_mask = set,
- };
-
- sigaction(SIGUSR1, &sa, NULL);
-
- sigdelset(&set, SIGKILL);
- sigdelset(&set, SIGSTOP);
- sigdelset(&set, SIGSEGV);
- sigdelset(&set, SIGFPE);
- sigdelset(&set, SIGILL);
- sigdelset(&set, SIGBUS);
- sigdelset(&set, SIGHUP);
- sigdelset(&set, SIGIO);
- sigdelset(&set, SIGINT);
- sigdelset(&set, SIGUSR1);
- sigdelset(&set, 35);
- sigdelset(&set, 36);
- pthread_sigmask(SIG_SETMASK, &set, NULL);
-
- sigemptyset(&set);
- //sigaddset(&set, SIGINT);
- sigaddset(&set, SIGTERM);
- sigaddset(&set, SIGSEGV);
- sigaddset(&set, SIGILL);
- sigaddset(&set, SIGFPE);
- sigaddset(&set, SIGBUS);
-
- sigwait(&set, &sig);
- log_info1("terminate, sig = %i\n", sig);
-
- triton_terminate();
-
- return EXIT_SUCCESS;
-}
-