[PATCH 3/4] HS20: Provide appropriate permission to the osu related files

Ilan Peer ilan.peer
Sun Jan 18 17:45:01 PST 2015


From: ASHUTOSH NARAYAN <ashutoshx.narayan at intel.com>

The icon files and the osu-providers.txt that is generated don't have
proper permission for external programs to access. The fix now provides
access permission that is the same as the permissions for osu_dir.

Signed-off-by: ASHUTOSH NARAYAN <ashutoshx.narayan at intel.com>
---
 wpa_supplicant/hs20_supplicant.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/wpa_supplicant/hs20_supplicant.c b/wpa_supplicant/hs20_supplicant.c
index 53c7d63..e673422 100644
--- a/wpa_supplicant/hs20_supplicant.c
+++ b/wpa_supplicant/hs20_supplicant.c
@@ -7,6 +7,7 @@
  */
 
 #include "includes.h"
+#include <sys/stat.h>
 
 #include "common.h"
 #include "eloop.h"
@@ -216,6 +217,29 @@ int hs20_anqp_send_req(struct wpa_supplicant *wpa_s, const u8 *dst, u32 stypes,
 }
 
 
+static void hs20_set_osu_access_permisson(const char *osu_dir,
+					  const char *fname)
+{
+	struct stat statbuf;
+
+	if (!fname || !osu_dir)
+		return;
+
+	/* Get OSU Dir information */
+	if (stat(osu_dir, &statbuf) < 0) {
+		wpa_printf(MSG_WARNING, "Cannot Stat the  OSU folder %s.", osu_dir);
+		return;
+	}
+
+	if (chmod(fname, statbuf.st_mode) < 0) {
+		wpa_printf(MSG_WARNING, "Cannot change the permissions for %s.", fname);
+		return;
+	}
+
+	if (chown(fname, statbuf.st_uid, statbuf.st_gid) < 0)
+		wpa_printf(MSG_WARNING, "Cannot change the ownership for %s.", fname);
+}
+
 static int hs20_process_icon_binary_file(struct wpa_supplicant *wpa_s,
 					 const u8 *sa, const u8 *pos,
 					 size_t slen)
@@ -278,6 +302,9 @@ static int hs20_process_icon_binary_file(struct wpa_supplicant *wpa_s,
 	f = fopen(fname, "wb");
 	if (f == NULL)
 		return -1;
+
+	hs20_set_osu_access_permisson(wpa_s->conf->osu_dir, fname);
+
 	if (fwrite(pos, slen, 1, f) != 1) {
 		fclose(f);
 		unlink(fname);
@@ -479,6 +506,9 @@ static void hs20_osu_fetch_done(struct wpa_supplicant *wpa_s)
 		hs20_free_osu_prov(wpa_s);
 		return;
 	}
+
+	hs20_set_osu_access_permisson(wpa_s->conf->osu_dir, fname);
+
 	for (i = 0; i < wpa_s->osu_prov_count; i++) {
 		struct osu_provider *osu = &wpa_s->osu_prov[i];
 		if (i > 0)
-- 
1.8.3.2




More information about the Hostap mailing list