X-Git-Url: http://git.pld-linux.org/?p=packages%2Fbluez-utils.git;a=blobdiff_plain;f=bluez-utils-bnep_ifup.patch;fp=bluez-utils-bnep_ifup.patch;h=081e2aeaf7d1b5b89255472aaa08b60c4eb50a9d;hp=0000000000000000000000000000000000000000;hb=cdf53febde4609688eccf1eadcabf0c57e0defa7;hpb=21238886d1b65bedc5b950ae32709e72a43dcb6a diff --git a/bluez-utils-bnep_ifup.patch b/bluez-utils-bnep_ifup.patch new file mode 100644 index 0000000..081e2ae --- /dev/null +++ b/bluez-utils-bnep_ifup.patch @@ -0,0 +1,158 @@ +--- network/bridge.c.orig 2008/05/06 18:40:54 1.11 ++++ network/bridge.c 2008/05/06 21:46:05 1.12 +@@ -119,6 +119,7 @@ + if (ifindex == 0) + return -ENODEV; + ++ memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, name, IFNAMSIZ); + ifr.ifr_ifindex = ifindex; + +--- network/common.c.orig 2008/02/02 03:37:43 1.20 ++++ network/common.c 2008/05/06 21:46:05 1.21 +@@ -164,6 +164,7 @@ + { + struct bnep_conndel_req req; + ++ memset(&req, 0, sizeof(req)); + baswap((bdaddr_t *)&req.dst, dst); + req.flags = 0; + if (ioctl(ctl, BNEPCONNDEL, &req)) { +@@ -192,10 +193,12 @@ + } + + for (i=0; i < req.cnum; i++) { +- struct bnep_conndel_req req; +- memcpy(req.dst, ci[i].dst, ETH_ALEN); +- req.flags = 0; +- ioctl(ctl, BNEPCONNDEL, &req); ++ struct bnep_conndel_req del; ++ ++ memset(&del, 0, sizeof(del)); ++ memcpy(del.dst, ci[i].dst, ETH_ALEN); ++ del.flags = 0; ++ ioctl(ctl, BNEPCONNDEL, &del); + } + return 0; + } +@@ -204,6 +207,7 @@ + { + struct bnep_connadd_req req; + ++ memset(&req, 0, sizeof(req)); + strncpy(req.device, dev, 16); + req.device[15] = '\0'; + req.sock = sk; +@@ -223,17 +227,31 @@ + { + } + ++static int bnep_exec(const char **argv) ++{ ++ int pid; ++ GSpawnFlags flags = G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH; ++ ++ if (!g_spawn_async(NULL, (char **) argv, NULL, flags, bnep_setup, NULL, ++ &pid, NULL)) { ++ error("Unable to execute %s %s", *argv[0], *argv[1]); ++ return -EINVAL; ++ } ++ ++ return pid; ++} ++ + int bnep_if_up(const char *devname, uint16_t id) + { +- int sd, err, pid; ++ int sd, err; + struct ifreq ifr; + const char *argv[5]; +- struct bnep_data *bnep; +- GSpawnFlags flags; ++ struct bnep_data *bnep = NULL; + GSList *l; + + /* Check if a script is running */ +- if ((l = g_slist_find_custom(pids, devname, find_devname))) { ++ l = g_slist_find_custom(pids, devname, find_devname); ++ if (l) { + bnep = l->data; + + if (bnep->script && !strcmp(bnep->script, "avahi-autoipd")) { +@@ -242,13 +260,8 @@ + argv[2] = "--refresh"; + argv[3] = NULL; + +- flags = G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH; +- g_spawn_async(NULL, (char **) argv, NULL, flags, +- bnep_setup, (gpointer) devname, &pid, +- NULL); ++ bnep->pid = bnep_exec(argv); + } +- +- return bnep->pid; + } + + sd = socket(AF_INET6, SOCK_DGRAM, 0); +@@ -265,6 +278,9 @@ + return -err; + } + ++ if (bnep) ++ return bnep->pid; ++ + bnep = g_new0(struct bnep_data, 1); + bnep->devname = g_strdup(devname); + +@@ -291,15 +307,8 @@ + } else + argv[2] = NULL; + +- flags = G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH; +- if (!g_spawn_async(NULL, (char **) argv, NULL, flags, bnep_setup, +- (gpointer) devname, &pid, NULL)) { +- error("Unable to execute %s", argv[0]); +- return -EINVAL; +- } +- +- bnep->pid = pid; +- g_child_watch_add(pid, script_exited, bnep); ++ bnep->pid = bnep_exec(argv); ++ g_child_watch_add(bnep->pid, script_exited, bnep); + + done: + pids = g_slist_append(pids, bnep); +@@ -325,7 +334,7 @@ + if (!bnep->pid) + goto done; + +- if (bnep->script && !strcmp (bnep->script, "avahi-autoipd")) { ++ if (bnep->script && !strcmp(bnep->script, "avahi-autoipd")) { + argv[0] = bnep->script; + argv[1] = devname; + argv[2] = "--kill"; +@@ -352,12 +361,7 @@ + ifr.ifr_flags &= ~IFF_UP; + + /* Bring down the interface */ +- if ((ioctl(sd, SIOCSIFFLAGS, (caddr_t) &ifr)) < 0) { +- err = errno; +- error("Could not bring down %d. %s(%d)", devname, strerror(err), +- err); +- return -err; +- } ++ ioctl(sd, SIOCSIFFLAGS, (caddr_t) &ifr); + + pids = g_slist_remove(pids, bnep); + +--- network/connection.c.orig 2008/02/02 03:37:43 1.46 ++++ network/connection.c 2008/05/06 21:46:05 1.47 +@@ -90,6 +90,7 @@ + DBUS_TYPE_INVALID); + } + info("%s disconnected", nc->dev); ++ bnep_if_down(nc->dev); + nc->state = DISCONNECTED; + memset(nc->dev, 0, 16); + strncpy(nc->dev, prefix, strlen(prefix)); +