mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[PATCH] add MANAGED_EVENT to the forked udev environment
This will prevent a loop, if udev sends events back into the daemon.
This commit is contained in:
parent
a97b06483e
commit
6f59ed5547
3
udevd.c
3
udevd.c
@ -291,7 +291,7 @@ static void handle_udevsend_msg(int sock)
|
||||
/* copy environment buffer and reconstruct envp */
|
||||
memcpy(msg->envbuf, usend_msg.envbuf, envbuf_size);
|
||||
bufpos = 0;
|
||||
for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-1); i++) {
|
||||
for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-2); i++) {
|
||||
int keylen;
|
||||
char *key;
|
||||
|
||||
@ -314,6 +314,7 @@ static void handle_udevsend_msg(int sock)
|
||||
if (strncmp(key, "SEQNUM=", 7) == 0)
|
||||
msg->seqnum = strtoull(&key[7], NULL, 10);
|
||||
}
|
||||
msg->envp[i++] = "MANAGED_EVENT=1";
|
||||
msg->envp[i] = NULL;
|
||||
|
||||
/* if no seqnum is given, we move straight to exec queue */
|
||||
|
4
udevd.h
4
udevd.h
@ -36,7 +36,7 @@
|
||||
|
||||
struct udevsend_msg {
|
||||
char magic[20];
|
||||
char envbuf[HOTPLUG_BUFFER_SIZE];
|
||||
char envbuf[HOTPLUG_BUFFER_SIZE+256];
|
||||
};
|
||||
|
||||
struct hotplug_msg {
|
||||
@ -47,6 +47,6 @@ struct hotplug_msg {
|
||||
char *devpath;
|
||||
char *subsystem;
|
||||
unsigned long long seqnum;
|
||||
char *envp[HOTPLUG_NUM_ENVP];
|
||||
char *envp[HOTPLUG_NUM_ENVP+1];
|
||||
char envbuf[];
|
||||
};
|
||||
|
@ -132,6 +132,12 @@ 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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user