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.c121
1 files changed, 75 insertions, 46 deletions
diff --git a/accel-pptpd/main.c b/accel-pptpd/main.c
index 90f206df..31069f31 100644
--- a/accel-pptpd/main.c
+++ b/accel-pptpd/main.c
@@ -4,38 +4,64 @@
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
+#include <sys/mman.h>
#include "triton/triton.h"
-void sigterm(int num)
+static int goto_daemon;
+static char *pid_file;
+static char *conf_file;
+
+static void sigterm(int num)
{
}
-int main(int argc,char **argv)
-{
+
+#define ARG_MAX 128
+static int parse_cmdline(char ***argv)
+{
+ FILE *f;
int i;
- int daemon=0;
- char *pid_file=NULL;
- char *conf_file=NULL;
- sigset_t set;
+ size_t len;
- if (argc<2)
- goto usage;
+ f = fopen("/proc/self/cmdline", "r");
+ if (!f) {
+ perror("open cmdline");
+ _exit(EXIT_FAILURE);
+ }
- for(i=1; i<argc; i++)
+ *argv = malloc(ARG_MAX * sizeof(void *));
+ memset(*argv, 0, ARG_MAX * sizeof(void *));
+
+ for(i = 0; i < ARG_MAX; i++)
{
- if (!strcmp(argv[i],"-d"))
- daemon=1;
- else if (!strcmp(argv[i],"-p"))
- {
- if (i==argc-1)
+ len = 0;
+ if (getdelim(&(*argv)[i], &len, 0, f) < 0)
+ break;
+ }
+
+ 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)
+ pid_file = argv[++i];
+ } else if (!strcmp(argv[i], "-c")) {
+ if (i == argc - 1)
goto usage;
- conf_file=argv[++i];
+ conf_file = argv[++i];
}
}
@@ -43,21 +69,33 @@ int main(int argc,char **argv)
goto usage;
if (triton_init(conf_file))
- return EXIT_FAILURE;
-
- if (daemon)
- {
- pid_t pid=fork();
- if (pid>0)
+ _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);
+}
+int main(int argc, char **argv)
+{
+ sigset_t set;
+
+ if (goto_daemon) {
+ pid_t pid = fork();
+ if (pid > 0)
_exit(EXIT_SUCCESS);
- if (pid<0)
- {
+ if (pid < 0) {
perror("fork");
return EXIT_FAILURE;
}
- if (setsid()<0)
- return EXIT_FAILURE;
- pid=fork();
+ if (setsid() < 0)
+ _exit(EXIT_FAILURE);
+ pid = fork();
if (pid)
_exit(0);
umask(0);
@@ -67,19 +105,17 @@ int main(int argc,char **argv)
close(STDERR_FILENO);
}
- if (pid_file)
- {
- FILE *f=fopen("pid_file","w");
- if (f)
- {
- fprintf(f,"%i",getpid());
+ if (pid_file) {
+ FILE *f = fopen("pid_file", "w");
+ if (f) {
+ fprintf(f, "%i", getpid());
fclose(f);
}
}
triton_run();
- signal(SIGTERM,sigterm);
+ signal(SIGTERM, sigterm);
sigfillset(&set);
sigdelset(&set, SIGTERM);
sigdelset(&set, SIGSEGV);
@@ -92,12 +128,5 @@ int main(int argc,char **argv)
triton_terminate();
return EXIT_SUCCESS;
-usage:
- printf("usage: pptpd [-d] [-p <file>] -c <file>\
- where:\
- -d - daemon mode\
- -p - write pid to <file>\
- -c - config file\n");
- return EXIT_FAILURE;
}