diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | udevinitsend.c | 241 |
2 files changed, 0 insertions, 243 deletions
@@ -50,7 +50,6 @@ PROGRAMS = \ udev \ udevd \ udevsend \ - udevinitsend \ udeveventrecorder \ udevcontrol \ udevmonitor \ @@ -375,7 +374,6 @@ uninstall-bin: - rm -f $(DESTDIR)$(sbindir)/udev - rm -f $(DESTDIR)$(sbindir)/udevd - rm -f $(DESTDIR)$(sbindir)/udevsend - - rm -f $(DESTDIR)$(sbindir)/udevinitsend - rm -f $(DESTDIR)$(sbindir)/udeveventrecoreder - rm -f $(DESTDIR)$(sbindir)/udevcontrol - rm -f $(DESTDIR)$(sbindir)/udevstart diff --git a/udevinitsend.c b/udevinitsend.c deleted file mode 100644 index 4f50da8f68..0000000000 --- a/udevinitsend.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * udevinitsend.c - * - * Copyright (C) 2004, 2005 SuSE Linux Products GmbH - * Author: - * Hannes Reinecke <hare@suse.de> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation version 2 of the License. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include <stdio.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <sys/socket.h> -#include <sys/wait.h> -#include <sys/un.h> -#include <dirent.h> - -#include "udev.h" -#include "udev_version.h" -#include "udevd.h" -#include "udev_utils.h" -#include "logging.h" - -static int udev_log = 0; - -#ifdef USE_LOG -void log_message (int priority, const char *format, ...) -{ - va_list args; - - if (priority > udev_log) - return; - - va_start(args, format); - vsyslog(priority, format, args); - va_end(args); -} -#endif - -/* - * udevsend - * - * Scan a file, write all variables into the msgbuf and - * fires the message to udevd. - */ -static int udevsend(char *filename, int sock, int disable_loop_detection) -{ - static struct udevd_msg usend_msg; - int usend_msg_len; - int bufpos = 0; - struct stat statbuf; - int fd; - char *fdmap, *ls, *le, *ch; - struct sockaddr_un saddr; - socklen_t addrlen; - int retval = 0; - - if (stat(filename,&statbuf) < 0) { - dbg("cannot stat %s: %s\n", filename, strerror(errno)); - return 1; - } - fd = open(filename,O_RDONLY); - if (fd < 0) - return 1; - - fdmap = mmap(0, statbuf.st_size, - PROT_READ, MAP_PRIVATE, fd, 0); - close(fd); - if (fdmap == MAP_FAILED) { - dbg("mmap failed, errno %d\n", errno); - return 1; - } - - memset(&saddr, 0x00, sizeof(struct sockaddr_un)); - saddr.sun_family = AF_LOCAL; - /* use abstract namespace for socket path */ - 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 udevd_msg)); - strcpy(usend_msg.magic, UDEV_MAGIC); - usend_msg.type = UDEVD_UEVENT_INITSEND; - - ls = fdmap; - ch = le = ls; - while (*ch && ch < fdmap + statbuf.st_size) { - le = strchr(ch, '\n'); - if (!le) - break; - ch = strchr(ch, '='); - if (!ch) - break; - - /* prevent loops in the scripts we execute */ - if (strncmp(ls, "UDEVD_EVENT=", 12) == 0) { - if (!disable_loop_detection) { - dbg("event already handled by udev\n"); - retval = -1; - break; - } - goto loop_end; - } - - /* omit shell-generated keys */ - if (ls[0] == '_' && ls[1] == '=') { - goto loop_end; - } - - if (ch < le) { - strncpy(&usend_msg.envbuf[bufpos],ls,(ch - ls) + 1); - bufpos += (ch - ls) + 1; - if (ch[1] == '\'' && le[-1] == '\'') { - strncpy(&usend_msg.envbuf[bufpos],ch + 2, (le - ch) - 3); - bufpos += (le - ch) - 3; - } else { - strncpy(&usend_msg.envbuf[bufpos],ch + 1, (le - ch) - 1); - bufpos += (le - ch) - 1; - } - bufpos++; - } -loop_end: - ch = le + 1; - ls = ch; - } - munmap(fdmap, statbuf.st_size); - - usend_msg_len = offsetof(struct udevd_msg, envbuf) + bufpos; - dbg("usend_msg_len=%i", usend_msg_len); - - if (!retval) { - retval = sendto(sock, &usend_msg, usend_msg_len, 0, (struct sockaddr *)&saddr, addrlen); - if (retval < 0) { - dbg("error sending message (%s)", strerror(errno)); - retval = -1; - } - } - - return retval; -} - -int main(int argc, char *argv[], char *envp[]) -{ - static const char short_options[] = "d:f:lVh"; - int option; - char *event_dir = NULL; - char *event_file = NULL; - DIR *dirstream; - struct dirent *direntry; - int retval = 0; - int disable_loop_detection = 0; - int sock; - const char *env; - - env = getenv("UDEV_LOG"); - if (env) - udev_log = log_priority(env); - - logging_init("udevinitsend"); - dbg("version %s", UDEV_VERSION); - - /* get command line options */ - while (1) { - option = getopt(argc, argv, short_options); - if (option == -1) - break; - - dbg("option '%c': ", option); - switch (option) { - case 'd': - dbg("scan directory %s\n", optarg); - event_dir = optarg; - break; - - case 'f': - dbg("use event file %s\n", optarg); - event_file = optarg; - break; - - case 'l': - dbg("disable loop detection, ignore UDEVD_EVENT\n"); - disable_loop_detection = 1; - break; - - case 'h': - retval = 0; - } - } - - sock = socket(AF_LOCAL, SOCK_DGRAM, 0); - if (sock == -1) { - dbg("error getting socket"); - return 1; - } - - if (event_dir) { - dirstream = opendir(event_dir); - if (!dirstream) { - info("error opening directory %s: %s\n", - event_dir, strerror(errno)); - return 2; - } - chdir(event_dir); - while ((direntry = readdir(dirstream)) != NULL) { - if (!strcmp(direntry->d_name,".") || - !strcmp(direntry->d_name,"..")) - continue; - retval = udevsend(direntry->d_name, sock, disable_loop_detection); - } - closedir(dirstream); - } else if (event_file) { - retval = udevsend(event_file, sock, disable_loop_detection); - } - - if (sock != -1) - close(sock); - - if (retval) - return 3; - return 0; -} |