summaryrefslogtreecommitdiff
path: root/udev_dbus.c
diff options
context:
space:
mode:
authorgreg@kroah.com <greg@kroah.com>2004-03-24 21:37:34 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:11 -0700
commit357f44a534e5e32e52020121c983aca90ae7ac1b (patch)
treea03580d8f12b5ea3aa60fa7242c42eaf10a3c852 /udev_dbus.c
parentc5039077b710dca041b2b36a3fc3247964abc069 (diff)
[PATCH] move udev_dbus to extras/dbus
Should build now, but might have linking problems.
Diffstat (limited to 'udev_dbus.c')
-rw-r--r--udev_dbus.c179
1 files changed, 0 insertions, 179 deletions
diff --git a/udev_dbus.c b/udev_dbus.c
deleted file mode 100644
index 7e767040f0..0000000000
--- a/udev_dbus.c
+++ /dev/null
@@ -1,179 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <ctype.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-
-#include "udev.h"
-#include "udev_lib.h"
-#include "logging.h"
-
-#ifdef LOG
-unsigned char logname[LOGNAME_SIZE];
-void log_message(int level, const char *format, ...)
-{
- va_list args;
-
- if (!udev_log)
- return;
-
- va_start(args, format);
- vsyslog(level, format, args);
- va_end(args);
-}
-#endif
-
-/** variable for the connection the to system message bus or #NULL
- * if we cannot connect or acquire the org.kernel.udev service
- */
-static DBusConnection* sysbus_connection;
-
-/** Disconnect from the system message bus */
-static void sysbus_disconnect(void)
-{
- if (sysbus_connection == NULL)
- return;
-
- dbus_connection_disconnect(sysbus_connection);
- sysbus_connection = NULL;
-}
-
-/** Connect to the system message bus */
-static void sysbus_connect(void)
-{
- DBusError error;
-
- /* Connect to a well-known bus instance, the system bus */
- dbus_error_init(&error);
- sysbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
- if (sysbus_connection == NULL) {
- dbg("cannot connect to system message bus, error %s: %s",
- error.name, error.message);
- dbus_error_free(&error);
- return;
- }
-
- /* Acquire the org.kernel.udev service such that listeners
- * know that the message is really from us and not from a
- * random attacker. See the file udev_sysbus_policy.conf for
- * details.
- *
- * Note that a service can have multiple owners (though there
- * is a concept of a primary owner for reception of messages)
- * so no race is introduced if two copies of udev is running
- * at the same time.
- */
- dbus_bus_acquire_service(sysbus_connection, "org.kernel.udev", 0,
- &error);
- if (dbus_error_is_set(&error)) {
- printf("cannot acquire org.kernel.udev service, error %s: %s'",
- error.name, error.message);
- sysbus_disconnect();
- return;
- }
-}
-
-
-/** Send out a signal that a device node is created
- *
- * @param devnode name of the device node, e.g. /dev/sda1
- * @param path Sysfs path of device
- */
-static void sysbus_send_create(const char *devnode, const char *path)
-{
- DBusMessage* message;
- DBusMessageIter iter;
-
- /* object, interface, member */
- message = dbus_message_new_signal("/org/kernel/udev/NodeMonitor",
- "org.kernel.udev.NodeMonitor",
- "NodeCreated");
-
- dbus_message_iter_init(message, &iter);
- dbus_message_iter_append_string(&iter, devnode);
- dbus_message_iter_append_string(&iter, path);
-
- if ( !dbus_connection_send(sysbus_connection, message, NULL) )
- dbg("error sending d-bus signal");
-
- dbus_message_unref(message);
-
- dbus_connection_flush(sysbus_connection);
-}
-
-/** Send out a signal that a device node is deleted
- *
- * @param devnode Name of the device node, e.g. /udev/sda1
- * @param path Sysfs path of device
- */
-static void sysbus_send_remove(const char *devnode, const char *path)
-{
- DBusMessage* message;
- DBusMessageIter iter;
-
- /* object, interface, member */
- message = dbus_message_new_signal("/org/kernel/udev/NodeMonitor",
- "org.kernel.udev.NodeMonitor",
- "NodeDeleted");
-
- dbus_message_iter_init(message, &iter);
- dbus_message_iter_append_string(&iter, devnode);
- dbus_message_iter_append_string(&iter, path);
-
- if ( !dbus_connection_send(sysbus_connection, message, NULL) )
- dbg("error sending d-bus signal");
-
- dbus_message_unref(message);
-
- dbus_connection_flush(sysbus_connection);
-}
-
-int main(int argc, char *argv[], char *envp[])
-{
- char *action;
- char *devpath;
- char *devnode;
- int retval = 0;
-
- init_logging("udev_dbus");
-
- sysbus_connect();
- if (sysbus_connection == NULL)
- return 0;
-
- action = get_action();
- if (!action) {
- dbg("no action?");
- goto exit;
- }
- devpath = get_devpath();
- if (!devpath) {
- dbg("no devpath?");
- goto exit;
- }
- devnode = get_devnode();
- if (!devnode) {
- dbg("no devnode?");
- goto exit;
- }
-
- if (strcmp(action, "add") == 0) {
- sysbus_send_create(devnode, devpath);
- } else {
- if (strcmp(action, "remove") == 0) {
- sysbus_send_remove(devnode, devpath);
- } else {
- dbg("unknown action '%s'", action);
- retval = -EINVAL;
- }
- }
-
-exit:
- sysbus_disconnect();
- return retval;
-}