#include <linux/stddef.h>
#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, ...)
switch (child_pid) {
case 0:
/* daemon */
- setsid();
- chdir("/");
+ close(sock);
execl(UDEVD_BIN, "udevd", NULL);
dbg("exec of daemon failed");
_exit(1);
int subsystem_env = 0;
int bufpos = 0;
int retval = 1;
- int sock = -1;
int started_daemon = 0;
logging_init("udevsend");
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 */