chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
udevd: add udevcontrol
[elogind.git]
/
udevsend.c
diff --git
a/udevsend.c
b/udevsend.c
index 16174f5e466c5674079452e3dc72dddb50613550..2b92e659e2f2a09010f8ffaf96acf6264436d123 100644
(file)
--- a/
udevsend.c
+++ b/
udevsend.c
@@
-43,14
+43,16
@@
/* global variables */
static int sock = -1;
/* global variables */
static int sock = -1;
-#ifdef LOG
-unsigned char logname[LOGNAME_SIZE];
-void log_message (int level, const char *format, ...)
+#ifdef USE_LOG
+void log_message (int priority, const char *format, ...)
{
{
- va_list args;
+ va_list args;
+
+ if (priority > udev_log_priority)
+ return;
va_start(args, format);
va_start(args, format);
- vsyslog(
level
, format, args);
+ vsyslog(
priority
, format, args);
va_end(args);
}
#endif
va_end(args);
}
#endif
@@
-72,17
+74,17
@@
static int start_daemon(void)
/* daemon with empty environment */
close(sock);
execve(UDEVD_BIN, argv, envp);
/* daemon with empty environment */
close(sock);
execve(UDEVD_BIN, argv, envp);
-
dbg
("exec of daemon failed");
+
err
("exec of daemon failed");
_exit(1);
case -1:
_exit(1);
case -1:
-
dbg
("fork of daemon failed");
+
err
("fork of daemon failed");
return -1;
default:
exit(0);
}
break;
case -1:
return -1;
default:
exit(0);
}
break;
case -1:
-
dbg
("fork of helper failed");
+
err
("fork of helper failed");
return -1;
default:
waitpid(pid, NULL, 0);
return -1;
default:
waitpid(pid, NULL, 0);
@@
-100,11
+102,11
@@
static void run_udev(const char *subsystem)
case 0:
/* child */
execv(UDEV_BIN, argv);
case 0:
/* child */
execv(UDEV_BIN, argv);
-
dbg("exec of
child failed");
+
err("exec of udev
child failed");
_exit(1);
break;
case -1:
_exit(1);
break;
case -1:
-
dbg("fork of
child failed");
+
err("fork of udev
child failed");
break;
default:
waitpid(pid, NULL, 0);
break;
default:
waitpid(pid, NULL, 0);
@@
-113,7
+115,7
@@
static void run_udev(const char *subsystem)
int main(int argc, char *argv[], char *envp[])
{
int main(int argc, char *argv[], char *envp[])
{
- static struct udev
sen
d_msg usend_msg;
+ static struct udevd_msg usend_msg;
int usend_msg_len;
int i;
int loop;
int usend_msg_len;
int i;
int loop;
@@
-125,11
+127,14
@@
int main(int argc, char *argv[], char *envp[])
const char *subsystem = NULL;
logging_init("udevsend");
const char *subsystem = NULL;
logging_init("udevsend");
+#ifdef USE_LOG
+ udev_init_config();
+#endif
dbg("version %s", UDEV_VERSION);
sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (sock == -1) {
dbg("version %s", UDEV_VERSION);
sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (sock == -1) {
-
dbg
("error getting socket");
+
err
("error getting socket");
goto fallback;
}
goto fallback;
}
@@
-139,8
+144,9
@@
int main(int argc, char *argv[], char *envp[])
strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
- memset(&usend_msg, 0x00, sizeof(struct udev
sen
d_msg));
+ memset(&usend_msg, 0x00, sizeof(struct udevd_msg));
strcpy(usend_msg.magic, UDEV_MAGIC);
strcpy(usend_msg.magic, UDEV_MAGIC);
+ usend_msg.type = UDEVD_UEVENT;
/* copy all keys to send buffer */
for (i = 0; envp[i]; i++) {
/* copy all keys to send buffer */
for (i = 0; envp[i]; i++) {
@@
-149,17
+155,18
@@
int main(int argc, char *argv[], char *envp[])
key = envp[i];
keylen = strlen(key);
key = envp[i];
keylen = strlen(key);
- if (bufpos + keylen >= HOTPLUG_BUFFER_SIZE-1) {
- dbg("environment buffer too small, probably not called by the kernel");
- continue;
- }
/* prevent loops in the scripts we execute */
/* prevent loops in the scripts we execute */
- if (strncmp(key, "
MANAGED_EVENT=", 14
) == 0) {
+ if (strncmp(key, "
UDEVD_EVENT=", 12
) == 0) {
dbg("seems that the event source is not the kernel, just exit");
goto exit;
}
dbg("seems that the event source is not the kernel, just exit");
goto exit;
}
+ if (bufpos + keylen >= UEVENT_BUFFER_SIZE-1) {
+ err("environment buffer too small, probably not called by the kernel");
+ continue;
+ }
+
/* remember the SUBSYSTEM */
if (strncmp(key, "SUBSYSTEM=", 10) == 0)
subsystem = &key[10];
/* remember the SUBSYSTEM */
if (strncmp(key, "SUBSYSTEM=", 10) == 0)
subsystem = &key[10];
@@
-174,7
+181,7
@@
int main(int argc, char *argv[], char *envp[])
dbg("add 'SUBSYSTEM=%s' to env[%i] buffer from argv", argv[1], i);
}
dbg("add 'SUBSYSTEM=%s' to env[%i] buffer from argv", argv[1], i);
}
- usend_msg_len = offsetof(struct udev
sen
d_msg, envbuf) + bufpos;
+ usend_msg_len = offsetof(struct udevd_msg, envbuf) + bufpos;
dbg("usend_msg_len=%i", usend_msg_len);
/* If we can't send, try to start daemon and resend message */
dbg("usend_msg_len=%i", usend_msg_len);
/* If we can't send, try to start daemon and resend message */
@@
-187,18
+194,18
@@
int main(int argc, char *argv[], char *envp[])
}
if (errno != ECONNREFUSED) {
}
if (errno != ECONNREFUSED) {
-
dbg
("error sending message (%s)", strerror(errno));
+
err
("error sending message (%s)", strerror(errno));
goto fallback;
}
if (!started_daemon) {
goto fallback;
}
if (!started_daemon) {
-
dbg
("try to start udevd daemon");
+
info
("try to start udevd daemon");
retval = start_daemon();
if (retval) {
retval = start_daemon();
if (retval) {
-
info
("error starting daemon");
+
dbg
("error starting daemon");
goto fallback;
}
goto fallback;
}
-
info
("udevd daemon started");
+
dbg
("udevd daemon started");
started_daemon = 1;
} else {
dbg("retry to connect %d", SEND_WAIT_MAX_SECONDS * SEND_WAIT_LOOP_PER_SECOND - loop);
started_daemon = 1;
} else {
dbg("retry to connect %d", SEND_WAIT_MAX_SECONDS * SEND_WAIT_LOOP_PER_SECOND - loop);
@@
-207,7
+214,7
@@
int main(int argc, char *argv[], char *envp[])
}
fallback:
}
fallback:
-
info
("unable to connect to event daemon, try to call udev directly");
+
err
("unable to connect to event daemon, try to call udev directly");
run_udev(subsystem);
exit:
run_udev(subsystem);
exit: