]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Android: Force group access to ctrl_iface directory
authorJouni Malinen <jouni@qca.qualcomm.com>
Fri, 23 Nov 2012 15:05:47 +0000 (17:05 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 23 Nov 2012 15:06:36 +0000 (17:06 +0200)
wpa_supplicant is started from /init.*.rc on Android and that seems
to be using umask 0077 which would leave the control interface
directory without group access. This breaks things since Wi-Fi
framework assumes that this directory can be accessed by other
applications in the wifi group. Fix this by adding group access even
if umask value would prevent this.

In most cases, this issue was not hit since the control interface
directory is normally created by that same init.*.rc file with suitable
mode and wpa_supplicant is killed in the way that does not allow it to
remove the file. However, if wpa_supplicant is allowed stop cleanly, it
will remove the directory and the next start could result with the Wi-Fi
framework not being able to use Wi-Fi (and GUI not showing Wi-Fi getting
enabled).

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/ctrl_iface_unix.c

index c106350e77f43bea610877b4016cd243bb9d5500..f79286369755b9892321b3f24082ecfec1b3e2a6 100644 (file)
@@ -305,6 +305,22 @@ wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
                }
        }
 
+#ifdef ANDROID
+       /*
+        * wpa_supplicant is started from /init.*.rc on Android and that seems
+        * to be using umask 0077 which would leave the control interface
+        * directory without group access. This breaks things since Wi-Fi
+        * framework assumes that this directory can be accessed by other
+        * applications in the wifi group. Fix this by adding group access even
+        * if umask value would prevent this.
+        */
+       if (chmod(dir, S_IRWXU | S_IRWXG) < 0) {
+               wpa_printf(MSG_ERROR, "CTRL: Could not chmod directory: %s",
+                          strerror(errno));
+               /* Try to continue anyway */
+       }
+#endif /* ANDROID */
+
        if (gid_str) {
                grp = getgrnam(gid_str);
                if (grp) {