-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 05/22/2014 10:16 PM, André Valentin wrote:
> 
> Signed-off-by: André Valentin <[email protected]> --- 
> package/system/procd/patches/100-sysupgrade.patch |   73
> +++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644
> package/system/procd/patches/100-sysupgrade.patch
> 
> diff --git a/package/system/procd/patches/100-sysupgrade.patch
> b/package/system/procd/patches/100-sysupgrade.patch new file mode 100644 
> index 0000000..dbe9e5d --- /dev/null +++
> b/package/system/procd/patches/100-sysupgrade.patch @@ -0,0 +1,73 @@ +diff
> -uNrp procd-2014-03-18.orig/procd.h procd-2014-03-18/procd.h +---
> procd-2014-03-18.orig/procd.h 2014-03-21 10:15:26.000000000 +0100 ++++
> procd-2014-03-18/procd.h      2014-05-20 22:09:35.000000000 +0200 +@@ -36,6
> +36,7 @@ void ubus_init_system(struct ubus_contex + + void
> procd_state_next(void); + void procd_shutdown(int event); ++void
> procd_sysupgrade_as_init(int event); + void procd_early(void); + void
> procd_preinit(void); + void procd_coldplug(void); +diff -uNrp
> procd-2014-03-18.orig/system.c procd-2014-03-18/system.c +---
> procd-2014-03-18.orig/system.c        2014-03-21 10:15:26.000000000 +0100 ++++
> procd-2014-03-18/system.c     2014-05-20 22:12:17.000000000 +0200 +@@ -195,6
> +195,50 @@ static int system_upgrade(struct ubus_co + } + + enum { ++
> UPG_COMMAND, ++       UPG_ARGUMENTS, ++       __UPG_MAX ++}; ++ ++static 
> const struct
> blobmsg_policy upgrade_policy[__UPG_MAX] = { ++       [UPG_COMMAND] = { .name 
> =
> "command", .type = BLOBMSG_TYPE_STRING }, ++  [UPG_ARGUMENTS] = { .name =
> "arguments", .type = BLOBMSG_TYPE_STRING },

Be careful! sysupgrade parses the arguments and opens files relative to the
current working directory $PWD. While just passing through the arguments
string does work for absolute path names, it will NOT work for relative paths
if $PWD of procd != $PWD of sysupgrade

Probably the best is to pass the arguments as single fields in the blobmsg
instead of passing a string which is later on interpreted by the shell. 
        [UPG_IMAGE] = { .name = "images", .type = BLOBMSG_TYPE_STRING },
        [UPG_SAVECONFIG] = { .name = "saveconfig", .type = BLOBMSG_TYPE_BOOL },


> ++}; ++ ++static int system_upgrade_as_init(struct ubus_context *ctx,
> struct ubus_object *obj, ++                   struct ubus_request_data *req, 
> const char
> *method, ++                   struct blob_attr *msg) ++{ ++   struct blob_attr
> *tb[__UPG_MAX]; ++    const char *cmd; ++     const char *args; ++ ++ if 
> (!msg) ++
> return UBUS_STATUS_INVALID_ARGUMENT; ++ ++    blobmsg_parse(upgrade_policy,
> __UPG_MAX, tb, blob_data(msg), blob_len(msg));

these two lines are indented with spaces instead of tabs:
> ++       if (!tb[UPG_COMMAND] || !tb[UPG_ARGUMENTS]) ++
> return UBUS_STATUS_INVALID_ARGUMENT;


> ++ ++ cmd = strdup(blobmsg_get_string(tb[UPG_COMMAND])); ++   args =
> strdup(blobmsg_get_string(tb[UPG_ARGUMENTS])); ++ ++  if (!cmd ||
> !strlen(cmd)) { ++            LOG("sysupgrade command should not be empty!"); 
> ++
> return 0; ++  } ++ ++ upgrade_running = 1; ++ LOG("Running sysupgrade as
> init, cmd: '%s %s'\n", cmd, args); ++ procd_inittab_run("shutdown"); ++       
> if
> (args && strlen(args)) { ++           execl(cmd, cmd, args , (char *) 0); ++  
> } ++
> execl(cmd, cmd, (char *) 0); ++       return 0; ++} ++ ++enum { +
> WDT_FREQUENCY, +      WDT_TIMEOUT, +  WDT_STOP, +@@ -296,6 +337,7 @@ static
> const struct ubus_method system_m +   UBUS_METHOD_NOARG("board",
> system_board), +      UBUS_METHOD_NOARG("info",  system_info), +
> UBUS_METHOD_NOARG("upgrade", system_upgrade), ++
> UBUS_METHOD("upgrade_as_init", system_upgrade_as_init, upgrade_policy), +
> UBUS_METHOD("watchdog", watchdog_set, watchdog_policy), +
> UBUS_METHOD("signal", proc_signal, signal_policy), + };
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJTf0TyAAoJECBgbL4bcbCQYscH/R9D6e0fNkreS1sc+YoDCXG/
JkuN3j0iVR4/BQFl0W2Bn2L5g392BL0HjFPBDV/M+CDH9Iy0XlDLiAf2k3bJgVsJ
HOWglRWU7OXT/tYgJfpzRqtHJSm1bgH5amMZp7MPhU8KWtPWrI7y7MZYmGpE6kfS
vSjE45WWUVSO9OZfoqgz7t6y+OO4IhEFkEx547HKwEdj56BIH6qL7foia/hQC0sC
VK/aFr1bRBlqM8t4u4dpRrlrltkz7OLBQydcWwnivgpmtmGNGseZwNq5BW6QVHlN
vSfbGXFrbJJaWrqn/U3Ui2Ew0rPdI5tIzQQod4TjT5lMG0A6MVY2wy1g6hb5QRA=
=n18c
-----END PGP SIGNATURE-----
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to