From c9c795fe4e8d0293fb7118f83fc82f5f83bc0fde Mon Sep 17 00:00:00 2001 From: asandikci Date: Wed, 26 Jul 2023 15:29:40 +0300 Subject: [PATCH] c-daemon not linked to tty --- .gitignore | 2 +- README.md | 1 + c-daemon/daemon/daemon.c | 43 +++++++++++++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 3fd37fa..46343b1 100644 --- a/.gitignore +++ b/.gitignore @@ -77,4 +77,4 @@ Mkfile.old dkms.conf ### USER MODIFIED ### -# c-daemon/bin/ \ No newline at end of file +c-daemon/bin/ \ No newline at end of file diff --git a/README.md b/README.md index 5e3cc45..7651d28 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ git clone https://git.aliberksandikci.com.tr/liderahenk/go-daemon cd go-daemon/ go build -o c-daemon/bin/ c-daemon/go-files/info.go gcc -o c-daemon/bin/test c-daemon/daemon/test.c c-daemon/daemon/daemon.c +sudo ln -sv "$(pwd)"/c-daemon/bin/info /info ``` How to **start** c-daemon + go processes: diff --git a/c-daemon/daemon/daemon.c b/c-daemon/daemon/daemon.c index dbc0a0b..4ae9ae1 100644 --- a/c-daemon/daemon/daemon.c +++ b/c-daemon/daemon/daemon.c @@ -8,35 +8,63 @@ #include #define NR_OPEN 1024 +void logg(int num){ + printf("You are in: %d\n",num); +} + int _daemon(int nochdir, int noclose){ pid_t pid, sid; // pid_t defined in sys/types.h // pid_t is a signed int data type + + logg(1); pid = fork(); // fork of the parent process // fork() function defined in unistd.h + + logg(2); + if (pid < 0){ + logg(3); exit(EXIT_FAILURE); // exit and EXIT_FAILURE defined in stdlib.h } else if (pid > 0){ + logg(4); exit(EXIT_SUCCESS); } - // sid = setsid(); - // if (sid < 0) { - // exit(EXIT_FAILURE); - // } - // if ((chdir("/")) < 0) { - // exit(EXIT_FAILURE); - // } + + logg(5); + sid = setsid(); + logg(8); + + if (sid < 0) { + logg(9); + exit(EXIT_FAILURE); + } + + logg(10); + + if ((chdir("/")) < 0) { + logg(11); + exit(EXIT_FAILURE); + } + + // logg(11); // if (!noclose) { + // logg(12); // for (int i = 0; i < NR_OPEN; i++) // close(i); + // logg(13); // open("/dev/null", O_RDWR); + // logg(14); // dup(0); + // logg(15); // dup(0); + // logg(16); // } // close(STDOUT_FILENO); // close(STDERR_FILENO); while (1) { + logg(6); int status = system("./info"); // TODO SECURITY ISSUE // LINK https://stackoverflow.com/questions/5237482/how-do-i-execute-an-external-program-within-c-code-in-linux-with-arguments# @@ -44,5 +72,6 @@ int _daemon(int nochdir, int noclose){ sleep(1); } + logg(7); exit(EXIT_SUCCESS); } \ No newline at end of file