X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevsend.c;h=341ed4cc36e033814812855b06bb76141dd0cf1d;hb=16ac31aaee34f1085daf1c43a8645b174712b2d4;hp=7db2378b83b16afc9bda5e8a91cd56b52a721924;hpb=4a231017ff6e9f66a685b0d1e4e49dc46645bb40;p=elogind.git diff --git a/udevsend.c b/udevsend.c index 7db2378b8..341ed4cc3 100644 --- a/udevsend.c +++ b/udevsend.c @@ -36,11 +36,13 @@ #include #include "udev.h" -#include "udev_lib.h" #include "udev_version.h" #include "udevd.h" #include "logging.h" +/* global variables */ +static int sock = -1; + #ifdef LOG unsigned char logname[LOGNAME_SIZE]; void log_message (int level, const char *format, ...) @@ -66,8 +68,7 @@ static int start_daemon(void) switch (child_pid) { case 0: /* daemon */ - setsid(); - chdir("/"); + close(sock); execl(UDEVD_BIN, "udevd", NULL); dbg("exec of daemon failed"); _exit(1); @@ -119,7 +120,6 @@ int main(int argc, char *argv[], char *envp[]) int subsystem_env = 0; int bufpos = 0; int retval = 1; - int sock = -1; int started_daemon = 0; logging_init("udevsend"); @@ -131,14 +131,18 @@ int main(int argc, char *argv[], char *envp[]) goto exit; } + /* prevent loops in the scripts we execute */ + if (getenv("MANAGED_EVENT") != NULL) { + dbg("seems that the event source is not the kernel, just exit"); + goto exit; + } + sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (sock == -1) { dbg("error getting socket"); goto fallback; } - set_cloexec_flag(sock, 1); - memset(&saddr, 0x00, sizeof(struct sockaddr_un)); saddr.sun_family = AF_LOCAL; /* use abstract namespace for socket path */