diff --git a/package/hotplug2/Makefile b/package/hotplug2/Makefile index 94aadc085..ee35bd6fc 100644 --- a/package/hotplug2/Makefile +++ b/package/hotplug2/Makefile @@ -21,6 +21,7 @@ include $(INCLUDE_DIR)/package.mk define Package/hotplug2 SECTION:=utils CATEGORY:=Utilities + VERSION:=0.9+r102-$(PKG_RELEASE) TITLE:=Dynamic device management subsystem for embedded systems URL:=http://isteve.bofh.cz/~isteve/hotplug2/ endef diff --git a/package/hotplug2/patches/100-rules_override.patch b/package/hotplug2/patches/100-rules_override.patch deleted file mode 100644 index 55b2aaacc..000000000 --- a/package/hotplug2/patches/100-rules_override.patch +++ /dev/null @@ -1,35 +0,0 @@ -Index: hotplug2-0.9/hotplug2.c -=================================================================== ---- hotplug2-0.9.orig/hotplug2.c 2007-06-04 13:21:41.134723240 +0200 -+++ hotplug2-0.9/hotplug2.c 2007-06-04 13:21:41.203712752 +0200 -@@ -391,6 +391,7 @@ - int rv = 0; - int i; - char *coldplug_command = NULL; -+ char *rules_file = HOTPLUG2_RULE_PATH; - sigset_t block_mask; - - struct rules_t *rules = NULL; -@@ -435,6 +436,13 @@ - break; - - modprobe_command = *argv; -+ } else if (!strcmp(*argv, "--set-rules-file")) { -+ argv++; -+ argc--; -+ if (argc <= 0) -+ break; -+ -+ rules_file = *argv; - } - } - } -@@ -443,7 +451,7 @@ - #ifdef HAVE_RULES - if (!dumb) { - filemap = MAP_FAILED; -- rule_fd = open(HOTPLUG2_RULE_PATH, O_RDONLY | O_NOATIME); -+ rule_fd = open(rules_file, O_RDONLY | O_NOATIME); - if (rule_fd == -1) { - dumb = 1; - ERROR("rules parse","Unable to open rules file: %s.", strerror(errno)); diff --git a/package/hotplug2/patches/100-svn_update.patch b/package/hotplug2/patches/100-svn_update.patch new file mode 100644 index 000000000..ab6bbc242 --- /dev/null +++ b/package/hotplug2/patches/100-svn_update.patch @@ -0,0 +1,542 @@ +diff -urN -x .svn hotplug2-0.9/AUTHORS hotplug2/AUTHORS +--- hotplug2-0.9/AUTHORS 2006-10-08 18:13:50.000000000 +0200 ++++ hotplug2/AUTHORS 2007-06-25 10:51:14.688225416 +0200 +@@ -1,7 +1,11 @@ + Authors: + ---------- + iSteve +-Tomas Janousek ++ ++ Contributions: ++---------------- ++nbd (rules override patch) ++Tomas Janousek (Makefiles, SVN hosting) + + Thanks to: + ------------ +@@ -10,5 +14,9 @@ + Randy Dunlap (help with isapnpmap) + Igor2 (provided testing machines) + yanek (provided testing machines) ++Zdenek Styblik (provided testing OpenWRT device) ++OpenWRT team (for trusting this project) ++mtu (debugging, testing, ideas) ++mnemoc (trivial sanity changes on makefiles, linux24 compat patches) + +-...anyone taking more than a short peek at the software. +\ No newline at end of file ++...anyone taking more than a short peek at the software. +diff -urN -x .svn hotplug2-0.9/Changelog hotplug2/Changelog +--- hotplug2-0.9/Changelog 2006-10-08 15:32:31.000000000 +0200 ++++ hotplug2/Changelog 2007-06-25 10:51:14.689225264 +0200 +@@ -1,3 +1,10 @@ ++0.9 - 1.0: ++* Add --set-rules-file. ++* Allow any ACTION. ++* Add 'printdebug' rule. ++* Fix chmod, chown, chgrp. ++* Use octal for chmod and makedev. ++ + 0.8 - 0.9: + * Use signals to handle children. + * Separate info and debugging output. +@@ -44,4 +51,4 @@ + * Add more actions. + * Significant cleanup of rules handling. + * Better error reporting. +- +\ No newline at end of file ++ +diff -urN -x .svn hotplug2-0.9/docs/hotplug2.8 hotplug2/docs/hotplug2.8 +--- hotplug2-0.9/docs/hotplug2.8 2006-09-26 09:23:36.000000000 +0200 ++++ hotplug2/docs/hotplug2.8 2007-06-25 10:51:14.540247912 +0200 +@@ -31,6 +31,8 @@ + .TP + \fB\-\-set\-modprobe\-cmd \fR + Sets the application used to perform modprobe. It only gets used in dumb mode. Default is to autodetect: if '/bin/modprobe' is from module\-init\-tools, use '/sbin/modprobe', otherwise use '/sbin/hotplug2\-modwrap'. ++\fB\-\-set\-rules\-file \fR ++Sets the path to the file containing hotplug2 rules. + .SH "SIGNALS" + .TP + \fBSIGUSR1\fR +diff -urN -x .svn hotplug2-0.9/docs/hotplug2.rules.doc hotplug2/docs/hotplug2.rules.doc +--- hotplug2-0.9/docs/hotplug2.rules.doc 2006-09-26 10:19:46.000000000 +0200 ++++ hotplug2/docs/hotplug2.rules.doc 2007-06-25 10:51:14.537248368 +0200 +@@ -11,12 +11,12 @@ + [... [...]] + } + +-Comments are allowed, they are prefixed with '#', treating the whole rest of the +-line as comment. Please note that comments in place of action parameters are not +-supported. ++Comments are allowed, they are prefixed with '#', treating the whole rest of ++the line as comment. Please note that comments in place of action parameters ++are not supported. + +-The is one of the environmental variables that have been obtained by the +-uevent netlink. ++The is one of the environmental variables that have been obtained by ++the uevent netlink. + + COMMON KEYS + ----------- +@@ -66,9 +66,9 @@ + ------- + + * run <...> +- Execute an application using system();, takes one parameter. Note that +- the application has set all environmental variables read by uevent +- netlink. ++ Execute an application using system();, takes one parameter. Note ++ that the application has set all environmental variables read by ++ uevent netlink. + + * break + Break the processing of the current block of actions. +@@ -86,23 +86,22 @@ + + * exec ; + Execute an application. Takes variable number of parameters, but the +- last parameter must be terminated with semicolon. Again, all variables +- are set as environmental. ++ last parameter must be terminated with semicolon. Again, all ++ variables are set as environmental. + +- If you need to escape the ';', use '\\;'. Only applies for actions with +- variable number of parameters. ++ If you need to escape the ';', use '\\;'. Only applies for actions ++ with variable number of parameters. + + * makedev +- Create a device with given mode. The mode is not in octal unless it +- starts with '0', eg. "0644" != "644". ++ Create a device with given mode. Mode is interpreted as octal. + + Major, minor and devpath must be set for makedev to be able to work. + Tests for these variables are also performed internally in makedev + function. + + * symlink +- Create a symbolic link (symlink, also known as soft link) pointing at +- target with name linkname. ++ Create a symbolic link (symlink, also known as soft link) pointing ++ at target with name linkname. + + * chown + Change owner of path to owner name. +@@ -111,12 +110,14 @@ + Change group of path to group name. + + * chmod +- Change mode of path to given mode. Like with makedev, heading '0' is +- necessary for the mode to be interpreted as octal. ++ Change mode of path to given mode. Mode is interpreted as octal. + + * setenv + Sets environmental variable key to the given value. If an env var + of the given name already exists, it gets overwritten. ++ ++ * printdebug ++ Prints all variables read from kernel. + + ESCAPING + -------- +@@ -136,8 +137,9 @@ + SAMPLE CONFIG + ------------- + +-Below is a sample hotplug2.rules file. It loads modules to all available devices +-quietly and creates device nodes for block devices. ++Below is a sample hotplug2.rules file. It loads modules to all available ++devices quietly and creates device nodes for block devices. Note that this ++sample is not very viable for real life usage. + --------------------------------------------------------------------------------- + MODALIAS is set { + exec modprobe -q %MODALIAS% ; +@@ -146,3 +148,33 @@ + SUBSYSTEM == block, DEVPATH is set, MAJOR is set, MINOR is set { + makedev /dev/%DEVICENAME% 0644 + } ++ ++ ++Please find also the more complex set of rules, dedicated to handling most ++common needs. ++--------------------------------------------------------------------------------- ++#For debugging ++#ACTION is set { ++# printdebug ++#} ++ ++# Load modules (what old hotplug did) ++MODALIAS is set { ++ exec modprobe -q %MODALIAS% ; ++} ++ ++# Create device nodes ++DEVPATH is set, MAJOR is set, MINOR is set { ++ makedev /dev/%DEVICENAME% 0644 ++} ++ ++# Mount a USB flashdisk ++ACTION == add, PHYSDEVPATH ~~ "/usb[0-9]*/", DEVICENAME ~~ "^sd[a-z][0-9]+$", DEVPATH is set, MAJOR is set, MINOR is set { ++ makedev /dev/%DEVICENAME% 0644 ++ exec mount /dev/%DEVICENAME% /mnt/%DEVICENAME% ++} ++ ++# Unmount a USB flashdisk ++ACTION == remove, PHYSDEVPATH ~~ "/usb[0-9]*/", DEVICENAME ~~ "^sd[a-z][0-9]+$", MAJOR is set, MINOR is set { ++ exec umount /mnt/%DEVICENAME% ++} +diff -urN -x .svn hotplug2-0.9/docs/Makefile hotplug2/docs/Makefile +--- hotplug2-0.9/docs/Makefile 2006-09-26 00:27:02.000000000 +0200 ++++ hotplug2/docs/Makefile 2007-06-25 10:51:14.540247912 +0200 +@@ -2,12 +2,13 @@ + + BINS= + SUBDIRS= +- ++DESTDIR= ++MANDIR=/usr/share/man + + all: + + install: +- $(INSTALL) $(wildcard *.8) /usr/share/man/man8/ ++ $(INSTALL) $(wildcard *.8) $(DESTDIR)$(MANDIR)/man8/ + + + include ../common.mak +diff -urN -x .svn hotplug2-0.9/examples/Makefile hotplug2/examples/Makefile +--- hotplug2-0.9/examples/Makefile 2006-09-26 01:03:08.000000000 +0200 ++++ hotplug2/examples/Makefile 2007-06-25 10:51:14.685225872 +0200 +@@ -2,19 +2,23 @@ + + BINS= + SUBDIRS= ++DESTDIR= ++KERNELVER=`uname -r` + + + all: + + install: +- case "`uname -r`" in \ +- 2.6.*) \ +- $(INSTALL) hotplug2.rules-2.6kernel /etc/hotplug2.rules \ +- ;; \ +- *) \ +- $(INSTALL) hotplug2.rules-2.4kernel /etc/hotplug2.rules \ +- ;; \ +- esac ++ if ! [ -e "/etc/hotplug2.rules" ]; then \ ++ case "$(KERNELVER)" in \ ++ 2.6.*) \ ++ $(INSTALL) hotplug2.rules-2.6kernel $(DESTDIR)/etc/hotplug2.rules \ ++ ;; \ ++ *) \ ++ $(INSTALL) hotplug2.rules-2.4kernel $(DESTDIR)/etc/hotplug2.rules \ ++ ;; \ ++ esac; \ ++ fi; + + + include ../common.mak +diff -urN -x .svn hotplug2-0.9/hotplug2.c hotplug2/hotplug2.c +--- hotplug2-0.9/hotplug2.c 2006-10-08 15:18:23.000000000 +0200 ++++ hotplug2/hotplug2.c 2007-06-25 10:51:14.688225416 +0200 +@@ -391,6 +391,7 @@ + int rv = 0; + int i; + char *coldplug_command = NULL; ++ char *rules_file = HOTPLUG2_RULE_PATH; + sigset_t block_mask; + + struct rules_t *rules = NULL; +@@ -435,15 +436,31 @@ + break; + + modprobe_command = *argv; ++ } else if (!strcmp(*argv, "--set-rules-file")) { ++ argv++; ++ argc--; ++ if (argc <= 0) ++ break; ++ ++ rules_file = *argv; + } + } + } + } + +-#ifdef HAVE_RULES ++#ifndef HAVE_RULES ++ /* ++ * We don't use rules, so we use dumb mode only. ++ */ ++ dumb = 1; ++#else ++ /* ++ * We're not in dumb mode, parse the rules. If we fail, ++ * faillback to dumb mode. ++ */ + if (!dumb) { + filemap = MAP_FAILED; +- rule_fd = open(HOTPLUG2_RULE_PATH, O_RDONLY | O_NOATIME); ++ rule_fd = open(rules_file, O_RDONLY | O_NOATIME); + if (rule_fd == -1) { + dumb = 1; + ERROR("rules parse","Unable to open rules file: %s.", strerror(errno)); +@@ -477,10 +494,12 @@ + + if (dumb == 1) + ERROR("rules parse","Parsing rules failed, switching to dumb mode."); +- } else if (!modprobe_command) +-#else +- if (dumb && !modprobe_command) ++ } else + #endif ++ /* ++ * No modprobe command specified, let's autodetect it. ++ */ ++ if (!modprobe_command) + { + if (get_modprobe_command()) { + ERROR("modprobe_command","Unable to autodetect modprobe command."); +@@ -536,7 +555,7 @@ + + modalias = get_hotplug2_value_by_key(tmpevent, "MODALIAS"); + seqnum = get_hotplug2_value_by_key(tmpevent, "SEQNUM"); +- ++ + if (seqnum == NULL) { + free_hotplug2_event(tmpevent); + ERROR("reading events", "Malformed event read (missing SEQNUM)."); +@@ -547,7 +566,7 @@ + if (cur_seqnum > highest_seqnum) + highest_seqnum = cur_seqnum; + +- if (tmpevent->action == ACTION_ADD && (!dumb || modalias != NULL)) { ++ if ((dumb && tmpevent->action == ACTION_ADD && modalias != NULL) || (!dumb)) { + /* + * We have more children than we want. Wait until SIGCHLD handler reduces + * their numbers. +@@ -568,11 +587,9 @@ + sigprocmask(SIG_UNBLOCK, &block_mask, 0); + signal(SIGCHLD, SIG_DFL); + signal(SIGUSR1, SIG_DFL); +-#ifdef HAVE_RULES + if (!dumb) + perform_action(dup_hotplug2_event(tmpevent), rules); + else +-#endif + perform_dumb_action(dup_hotplug2_event(tmpevent), modalias); + exit(0); + break; +@@ -593,12 +610,10 @@ + signal(SIGINT, SIG_DFL); + signal(SIGCHLD, SIG_DFL); + +-#ifdef HAVE_RULES + if (!dumb) { + rules_free(rules); + free(rules); + } +-#endif + + cleanup(); + +diff -urN -x .svn hotplug2-0.9/linux24_compat/hotplug2-modwrap.c hotplug2/linux24_compat/hotplug2-modwrap.c +--- hotplug2-0.9/linux24_compat/hotplug2-modwrap.c 2006-09-25 22:23:07.000000000 +0200 ++++ hotplug2/linux24_compat/hotplug2-modwrap.c 2007-06-25 10:51:14.601238640 +0200 +@@ -122,6 +122,12 @@ + free(module); + free(line); + } ++ ++ if (strcmp(argv[argc - 1], match_alias) == 0) { ++ if (execute(argv)) { ++ ERROR("execute", "Unable to execute: `%s'.", argv[0]); ++ } ++ } + + free(filename); + free(match_alias); +diff -urN -x .svn hotplug2-0.9/linux24_compat/Makefile hotplug2/linux24_compat/Makefile +--- hotplug2-0.9/linux24_compat/Makefile 2006-09-26 00:26:46.000000000 +0200 ++++ hotplug2/linux24_compat/Makefile 2007-06-25 10:51:14.601238640 +0200 +@@ -2,13 +2,14 @@ + + BINS=generate_alias hotplug2-coldplug-2.4 hotplug2-modwrap + SUBDIRS= ++DESTDIR= + + + all: $(BINS) + + install: +- $(INSTALL_BIN) hotplug2-coldplug-2.4 hotplug2-modwrap /sbin/ +- $(INSTALL_BIN) generate_alias /usr/sbin/ ++ $(INSTALL_BIN) hotplug2-coldplug-2.4 hotplug2-modwrap $(DESTDIR)/sbin/ ++ $(INSTALL_BIN) generate_alias $(DESTDIR)/usr/sbin/ + + + hotplug2-coldplug-2.4: hotplug2-coldplug-2.4.o ../parser_utils.o ../filemap_utils.o ../mem_utils.o +diff -urN -x .svn hotplug2-0.9/Makefile hotplug2/Makefile +--- hotplug2-0.9/Makefile 2006-09-26 01:03:08.000000000 +0200 ++++ hotplug2/Makefile 2007-06-25 10:51:14.693224656 +0200 +@@ -2,12 +2,13 @@ + + BINS=hotplug2 hotplug2-dnode + SUBDIRS=linux24_compat docs examples ++DESTDIR= + + + all: $(BINS) + + install: +- $(INSTALL_BIN) $(BINS) /sbin/ ++ $(INSTALL_BIN) $(BINS) $(DESTDIR)/sbin/ + + + hotplug2: hotplug2.o childlist.o mem_utils.o rules.o +diff -urN -x .svn hotplug2-0.9/rules.c hotplug2/rules.c +--- hotplug2-0.9/rules.c 2006-09-29 22:19:31.000000000 +0200 ++++ hotplug2/rules.c 2007-06-25 10:51:14.692224808 +0200 +@@ -59,6 +59,24 @@ + free(path); + } + ++static void rmdir_p(char *path) { ++ char *ptr; ++ ++ path = strdup(path); ++ ptr = path; ++ while (ptr != NULL) { ++ ptr = strrchr(path, '/'); ++ if (ptr == NULL) ++ break; ++ ++ *ptr = '\0'; ++ ++ if (rmdir(path)) ++ break; ++ } ++ free(path); ++} ++ + static char *replace_str(char *hay, char *needle, char *replacement) { + char *ptr, *start, *bptr, *buf; + int occurences, j; +@@ -250,11 +268,30 @@ + return rv; + } + +-static int chown_chgrp(int action, char *file, char *param) { ++static int chmod_file(struct hotplug2_event_t *event, char *file, char *value) { ++ int rv; ++ ++ file = replace_key_by_value(strdup(file), event); ++ value = replace_key_by_value(strdup(value), event); ++ ++ rv = chmod(file, strtoul(value, 0, 8)); ++ ++ free(file); ++ free(value); ++ ++ return rv; ++} ++ ++static int chown_chgrp(struct hotplug2_event_t *event, int action, char *file, char *param) { + struct group *grp; + struct passwd *pwd; + int rv; +- ++ ++ file = replace_key_by_value(strdup(file), event); ++ param = replace_key_by_value(strdup(param), event); ++ ++ rv = -1; ++ + switch (action) { + case ACT_CHOWN: + pwd = getpwnam(param); +@@ -265,8 +302,20 @@ + rv = chown(file, -1, grp->gr_gid); + break; + } ++ ++ free(file); ++ free(param); + +- return -1; ++ return rv; ++} ++ ++static int print_debug(struct hotplug2_event_t *event) { ++ int i; ++ ++ for (i = 0; i < event->env_vars_c; i++) ++ printf("%s=%s\n", event->env_vars[i].key, event->env_vars[i].value); ++ ++ return 0; + } + + static int rule_condition_eval(struct hotplug2_event_t *event, struct condition_t *condition) { +@@ -347,11 +396,11 @@ + last_rv = make_dev_from_event(event, rule->actions[i].parameter[0], strtoul(rule->actions[i].parameter[1], NULL, 0)); + break; + case ACT_CHMOD: +- last_rv = chmod(rule->actions[i].parameter[0], strtoul(rule->actions[i].parameter[1], NULL, 0)); ++ last_rv = chmod_file(event, rule->actions[i].parameter[0], rule->actions[i].parameter[1]); + break; + case ACT_CHOWN: + case ACT_CHGRP: +- last_rv = chown_chgrp(rule->actions[i].type, rule->actions[i].parameter[0], rule->actions[i].parameter[1]); ++ last_rv = chown_chgrp(event, rule->actions[i].type, rule->actions[i].parameter[0], rule->actions[i].parameter[1]); + break; + case ACT_SYMLINK: + last_rv = make_symlink(event, rule->actions[i].parameter[0], rule->actions[i].parameter[1]); +@@ -365,6 +414,13 @@ + case ACT_SETENV: + last_rv = setenv(rule->actions[i].parameter[0], rule->actions[i].parameter[1], 1); + break; ++ case ACT_REMOVE: ++ last_rv = unlink(rule->actions[i].parameter[0]); ++ rmdir_p(rule->actions[i].parameter[0]); ++ break; ++ case ACT_DEBUG: ++ last_rv = print_debug(event); ++ break; + } + } + +@@ -518,6 +574,8 @@ + {"chmod", 2, ACT_CHMOD}, + {"chgrp", 2, ACT_CHGRP}, + {"setenv", 2, ACT_SETENV}, ++ {"remove", 1, ACT_REMOVE}, ++ {"printdebug", 0, ACT_DEBUG}, + /*symlink*/ + {"symlink", 2, ACT_SYMLINK}, + {"softlink", 2, ACT_SYMLINK}, +diff -urN -x .svn hotplug2-0.9/rules.h hotplug2/rules.h +--- hotplug2-0.9/rules.h 2006-09-25 13:42:22.000000000 +0200 ++++ hotplug2/rules.h 2007-06-25 10:51:14.687225568 +0200 +@@ -24,9 +24,11 @@ + #define ACT_CHGRP 6 /* chgrp <...> */ + #define ACT_CHOWN 7 /* chown <...> */ + #define ACT_SYMLINK 8 /* symlink <...> */ +-#define ACT_NEXT_EVENT 9 /* next */ ++#define ACT_NEXT_EVENT 9 /* next */ + #define ACT_NEXT_IF_FAILED 10 /* next_if_failed */ + #define ACT_SETENV 11 /* setenv <...> */ ++#define ACT_REMOVE 12 /* remove <...> */ ++#define ACT_DEBUG 13 /* debug */ + + #define EVAL_MATCH 1 + #define EVAL_NOT_MATCH 0 +diff -urN -x .svn hotplug2-0.9/TODO hotplug2/TODO +--- hotplug2-0.9/TODO 1970-01-01 01:00:00.000000000 +0100 ++++ hotplug2/TODO 2007-06-25 10:51:14.691224960 +0200 +@@ -0,0 +1 @@ ++ - live rules update (via inotify) diff --git a/package/hotplug2/patches/120-action_types.patch b/package/hotplug2/patches/120-action_types.patch deleted file mode 100644 index c81b241b7..000000000 --- a/package/hotplug2/patches/120-action_types.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: hotplug2-0.9/hotplug2.c -=================================================================== ---- hotplug2-0.9.orig/hotplug2.c 2007-06-25 09:07:07.038012616 +0200 -+++ hotplug2-0.9/hotplug2.c 2007-06-25 09:07:19.420130248 +0200 -@@ -555,7 +555,7 @@ - if (cur_seqnum > highest_seqnum) - highest_seqnum = cur_seqnum; - -- if (tmpevent->action == ACTION_ADD && (!dumb || modalias != NULL)) { -+ if (!dumb || modalias != NULL) { - /* - * We have more children than we want. Wait until SIGCHLD handler reduces - * their numbers.