Add support for managing device access list 11/17411/6
authorJiung Yu <jiung.yu@samsung.com>
Fri, 7 Mar 2014 01:28:34 +0000 (10:28 +0900)
committerJiung Yu <jiung.yu@samsung.com>
Wed, 12 Mar 2014 08:56:23 +0000 (17:56 +0900)
Change-Id: Idb9443c4628cfd0b718e2c67c48d4cb9ac40c91f
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
CMakeLists.txt
files/access_list [new file with mode: 0644]
include/wifi-direct-manager.h
include/wifi-direct-util.h
packaging/wifi-direct-manager.changes
packaging/wifi-direct-manager.spec
src/.wifi-direct-manager.c.swp [deleted file]
src/wifi-direct-client.c
src/wifi-direct-event.c
src/wifi-direct-manager.c
src/wifi-direct-util.c

index 9d711f6..b55e8ec 100755 (executable)
@@ -47,5 +47,6 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/wifi-direct-server.sh DESTINATION bin)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/wifi-direct-dhcp.sh DESTINATION bin)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/p2p_supp.sh DESTINATION sbin)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/p2p_supp.conf DESTINATION etc/wifi-direct)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/access_list DESTINATION etc/wifi-direct)
 
 ADD_SUBDIRECTORY(plugin/wpasupplicant)
diff --git a/files/access_list b/files/access_list
new file mode 100644 (file)
index 0000000..e69de29
index 56ba401..c45505e 100644 (file)
@@ -152,6 +152,7 @@ typedef struct {
        void *group;
 
        GList *query_handles;
+       GList *access_list;
 
        void *oem_ops;
        void *plugin_handle;
@@ -181,6 +182,10 @@ int wfd_manager_set_autoconnection(int autoconnection);
 int wfd_manager_get_req_wps_mode(int *req_wps_mode);
 int wfd_manager_set_req_wps_mode(int req_wps_mode);
 
+int wfd_manager_access_control(wfd_manager_s *manager, unsigned char *dev_addr);
+int wfd_manager_add_to_access_list(wfd_manager_s *manager, wfd_device_s *peer, int allowed);
+int wfd_manager_del_from_access_list(wfd_manager_s *manager, unsigned char *mac);
+
 int wfd_manager_service_add(wfd_manager_s *manager, wifi_direct_service_type_e type, char *data);
 int wfd_manager_service_del(wfd_manager_s *manager, wifi_direct_service_type_e  type, char *data);
 int wfd_manager_serv_disc_req(wfd_manager_s *manager, unsigned char* mad_addr, wifi_direct_service_type_e  type, char *data);
@@ -200,6 +205,7 @@ int wfd_manager_cancel_connection(wfd_manager_s *manager, unsigned char *peer_ad
 int wfd_manager_reject_connection(wfd_manager_s *manager, unsigned char *peer_addr);
 int wfd_manager_disconnect(wfd_manager_s *manager, unsigned char *peer_addr);
 int wfd_manager_disconnect_all(wfd_manager_s *manager);
+int wfd_manager_get_access_list(wfd_manager_s *manager, wfd_access_list_info_s **access_list_data);
 int wfd_manager_get_peers(wfd_manager_s *manager, wfd_discovery_entry_s **peers);
 int wfd_manager_get_connected_peers(wfd_manager_s *manager, wfd_connected_peer_info_s **peers_data);
 wfd_device_s *wfd_manager_find_connected_peer(wfd_manager_s *manager, unsigned char *peer_addr);
index 505fbc5..efe96bf 100644 (file)
@@ -29,6 +29,7 @@
 #define __WIFI_DIRECT_UTIL_H__
 
 #define DEFAULT_MAC_FILE_PATH "/opt/etc/.mac.info"
+#define DEFAULT_DEVICE_LIST_FILE_PATH "/usr/etc/wifi-direct/access_list"
 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
 #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
 #define IP2STR(a) (a)[0], (a)[1], (a)[2], (a)[3]
@@ -82,6 +83,11 @@ int wfd_util_wifi_direct_activatable();
 int wfd_util_get_wifi_direct_state();
 int wfd_util_set_wifi_direct_state(int state);
 int wfd_util_get_local_dev_mac(unsigned char *dev_mac);
+
+int wfd_util_get_access_list(GList **access_list);
+int wfd_util_rewrite_device_list_to_file(GList *access_list);
+int wfd_util_add_device_to_list(wfd_device_s *peer, int allowed);
+int wfd_util_reset_access_list_file();
 int wfd_util_start_wifi_direct_popup();
 int wfd_util_dhcps_start();
 int wfd_util_dhcps_wait_ip_leased(wfd_device_s *peer);
index 786a32e..5e31730 100644 (file)
@@ -1,3 +1,6 @@
+Fri, 07 Mar 2014 Jiung Yu <jiung.yu@samaung.com> (1.0.10)
+  * Add support for managing device access list
+
 Thu, 13 Feb 2014 Jiung Yu <jiung.yu@samaung.com> (1.0.9)
   * Add Wifi Direct Display support 
 
index ea5e695..96979af 100644 (file)
@@ -1,6 +1,6 @@
 Name:       wifi-direct-manager
 Summary:    Wi-Fi Direct manger
-Version:    1.0.9
+Version:    1.0.10
 Release:    1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
@@ -78,6 +78,7 @@ vconftool set -t string memory/private/wifi_direct_manager/dhcpc_server_ip 0.0.0
 /usr/etc/wifi-direct/dhcpd.p2p.conf
 /usr/etc/wifi-direct/udhcp_script.non-autoip
 /usr/etc/wifi-direct/p2p_supp.conf
+/usr/etc/wifi-direct/access_list
 %{_bindir}/dhcpd-notify.sh
 %{_bindir}/wifi-direct-server.sh
 %{_bindir}/wifi-direct-dhcp.sh
diff --git a/src/.wifi-direct-manager.c.swp b/src/.wifi-direct-manager.c.swp
deleted file mode 100755 (executable)
index 326a8ee..0000000
Binary files a/src/.wifi-direct-manager.c.swp and /dev/null differ
index a7d3585..d05aba1 100644 (file)
@@ -191,6 +191,12 @@ char *wfd_server_print_cmd(wifi_direct_cmd_e cmd)
                return "WIFI_DIRECT_CMD_GET_DISPLAY_PORT";
        case WIFI_DIRECT_CMD_GET_DISPLAY_TYPE:
                return "WIFI_DIRECT_CMD_GET_DISPLAY_TYPE";
+       case WIFI_DIRECT_CMD_GET_ACCESS_LIST:
+               return"WIFI_DIRECT_CMD_GET_ACCESS_LIST";
+       case WIFI_DIRECT_CMD_ADD_TO_ACCESS_LIST:
+               return "WIFI_DIRECT_CMD_ADD_TO_ACCESS_LIST";
+       case WIFI_DIRECT_CMD_DEL_FROM_ACCESS_LIST:
+               return "WIFI_DIRECT_CMD_DEL_FROM_ACCESS_LIST";
        default:
                return "WIFI_DIRECT_CMD_INVALID";
 
@@ -1600,13 +1606,56 @@ static gboolean wfd_client_process_request(GIOChannel *source,
                break;
        case WIFI_DIRECT_CMD_GET_DISPLAY_TYPE:
                {
-                       res = wfd_local_get_display_type(&rsp.param1);
+                       res = wfd_local_get_display_type((wifi_direct_display_type_e *)&rsp.param1);
                        if (res < 0) {
                                WDS_LOGE("Failed to get local wifi display type");
                                rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
                        }
                }
                break;
+       case WIFI_DIRECT_CMD_GET_ACCESS_LIST:
+               {
+                       wfd_access_list_info_s *devices = NULL;
+                       int device_cnt = 0;
+                       device_cnt = wfd_manager_get_access_list(manager, &devices);
+                       WDS_LOGD("device in access list count [%d], access list [%x]", device_cnt, devices);
+                       if (device_cnt < 0) {
+                               WDS_LOGE("Failed to get access list");
+                               rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+                               break;
+                       }
+                       rsp.param1 = device_cnt;
+                       rsp.result = WIFI_DIRECT_ERROR_NONE;
+
+                       rsp.data_length = device_cnt * sizeof(wfd_access_list_info_s);
+                       extra_rsp = (char*) devices;
+                       WDS_LOGD("extra_rsp length [%d], extra_rsp [%x]", rsp.data_length, extra_rsp);
+               }
+               break;
+       case WIFI_DIRECT_CMD_ADD_TO_ACCESS_LIST:
+               {
+                       wfd_device_s *peer = NULL;
+                       peer = wfd_peer_find_by_addr(manager, req.data.mac_addr);
+                       if(peer)
+                               res = wfd_manager_add_to_access_list(manager, peer, req.data.int1);
+                       else
+                               res = -1;
+
+                       if (res < 0) {
+                               WDS_LOGE("Failed to add device to list");
+                               rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+                       }
+               }
+               break;
+       case WIFI_DIRECT_CMD_DEL_FROM_ACCESS_LIST:
+               {
+                       res = wfd_manager_del_from_access_list(manager, req.data.mac_addr);
+                       if (res < 0) {
+                               WDS_LOGE("Failed to delete device from list");
+                               rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+                       }
+               }
+               break;
        default:
                WDS_LOGE("Unknown command[%d]", req.cmd);
                rsp.result = WIFI_DIRECT_ERROR_NOT_PERMITTED;
index 44f7310..b75c45a 100644 (file)
@@ -419,6 +419,13 @@ int wfd_process_event(void *user_data, void *data)
        case WFD_OEM_EVENT_PROV_DISC_DISPLAY:
        case WFD_OEM_EVENT_PROV_DISC_KEYPAD:
        {
+               wfd_group_s *group = (wfd_group_s*) manager->group;
+               if ((group && group->member_count >= manager->max_station) ||
+                               !wfd_manager_access_control(manager, event->dev_addr)) {
+                       WDS_LOGD("Provision discovery is not granted");
+                       break;
+               }
+
                wfd_device_s *peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
                if (!peer) {
                        WDS_LOGD("Porv_disc from unknown peer. Add new peer");
@@ -475,6 +482,10 @@ int wfd_process_event(void *user_data, void *data)
        break;
        case WFD_OEM_EVENT_INVITATION_REQ:
        {
+               if (!wfd_manager_access_control(manager, event->dev_addr)) {
+                       WDS_LOGD("Invitation request is not granted");
+                       break;
+               }
                wfd_device_s *peer = NULL;
                wfd_session_s *session = NULL;
                wfd_oem_invite_data_s *edata = (wfd_oem_invite_data_s*) event->edata;
@@ -512,6 +523,12 @@ int wfd_process_event(void *user_data, void *data)
        }
        break;
        case WFD_OEM_EVENT_GO_NEG_REQ:
+       {
+               if (!wfd_manager_access_control(manager, event->dev_addr)) {
+                       WDS_LOGD("GO negotiation is not granted");
+                       break;
+               }
+       }
        case WFD_OEM_EVENT_GO_NEG_DONE:
        case WFD_OEM_EVENT_WPS_DONE:
                wfd_session_process_event(manager, event);
@@ -525,6 +542,11 @@ int wfd_process_event(void *user_data, void *data)
                        break;
                }
 
+               if(wfd_manager_find_connected_peer(manager, event->intf_addr)) {
+                       WDS_LOGD("Ignore this event");
+                       break;
+               }
+
                wfd_session_s *session = (wfd_session_s*) manager->session;
                if (!session) {
                        WDS_LOGE("Unexpected event. Session is NULL [peer: " MACSTR "]",
index bbef95d..17f0c28 100644 (file)
@@ -112,7 +112,6 @@ static int _wfd_local_init_device(wfd_manager_s *manager)
        if (res < 0) {
                WDS_LOGE("Failed to get local device MAC address");
        }
-
        memcpy(local->intf_addr, local->dev_addr, MACADDR_LEN);
        local->intf_addr[4] ^= 0x80;
        WDS_LOGD("Local Interface MAC address [" MACSTR "]", MAC2STR(local->intf_addr));
@@ -940,6 +939,60 @@ static int _wfd_manager_service_copy(char* dst, GList* services, int dst_length)
        return res;
 }
 
+int wfd_manager_get_access_list(wfd_manager_s *manager, wfd_access_list_info_s **access_list_data)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       GList *temp = NULL;
+       wfd_access_list_info_s *device = NULL;
+       wfd_access_list_info_s *devices = NULL;
+       int device_count = 0;
+       int count = 0;
+       int res = 0;
+
+       if (!manager || !access_list_data) {
+               WDS_LOGE("Invalid parameter");
+               return -1;
+       }
+
+       device_count = g_list_length(manager->access_list);
+       if (device_count < 0)
+               return -1;
+       else if (device_count == 0)
+               return 0;
+
+       errno = 0;
+       devices = (wfd_access_list_info_s*) calloc(device_count, sizeof(wfd_access_list_info_s));
+       if (!devices) {
+               WDS_LOGF("Failed to allocate memory for access list. [%s]", strerror(errno));
+               return -1;
+       }
+
+       temp = g_list_first(manager->access_list);
+       while (temp && count < device_count) {
+               device = temp->data;
+               if (!device)
+                       goto next;
+
+               strncpy(devices[count].device_name, device->device_name, DEV_NAME_LEN);
+               devices[count].device_name[DEV_NAME_LEN] = '\0';
+               memcpy(devices[count].mac_address, device->mac_address, MACADDR_LEN);
+               devices[count].allowed = device->allowed;
+
+               count++;
+               WDS_LOGD("%dth device in list [%s]", count, device->device_name);
+next:
+               temp = g_list_next(temp);
+               device = NULL;
+       }
+       WDS_LOGD("%d devices converted", count);
+       WDS_LOGD("Final device count is %d", device_count);
+
+       *access_list_data = devices;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return count;
+}
+
 int wfd_manager_get_peers(wfd_manager_s *manager, wfd_discovery_entry_s **peers_data)
 {
        __WDS_LOG_FUNC_ENTER__;
@@ -1148,6 +1201,135 @@ int wfd_manager_get_goup_ifname(char **ifname)
        return 0;
 }
 
+static wfd_access_list_info_s *_wfd_manager_get_device_from_access_list(void *data, unsigned char *dev_addr)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       wfd_manager_s *manager = (wfd_manager_s*) data;
+       wfd_access_list_info_s *device = NULL;
+       GList *temp = NULL;
+
+       if (!data || !dev_addr) {
+               WDS_LOGE("Invalid parameter");
+               return NULL;
+       }
+
+       temp = g_list_first(manager->access_list);
+       while (temp) {
+               device = temp->data;
+               if (!memcmp(device->mac_address, dev_addr, MACADDR_LEN)) {
+                       WDS_LOGD("device found[" MACSTR "]", MAC2STR(dev_addr));
+                       break;
+               }
+               temp = g_list_next(temp);
+               device = NULL;
+       }
+
+       __WDS_LOG_FUNC_EXIT__;
+       return device;
+}
+
+int wfd_manager_access_control(wfd_manager_s *manager, unsigned char *dev_addr)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       wfd_access_list_info_s *result = NULL;
+       int res = 0;
+
+       result = _wfd_manager_get_device_from_access_list(manager, dev_addr);
+
+       if(result)
+               res = result->allowed;
+       else
+               res = 1;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return res;
+}
+
+int wfd_manager_add_to_access_list(wfd_manager_s *manager, wfd_device_s *peer, int allowed)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       wfd_access_list_info_s *result = NULL;
+       GList *temp = NULL;
+       int res = 0;
+
+       result = _wfd_manager_get_device_from_access_list(manager, peer->dev_addr);
+       if(result)
+       {
+               if(result->allowed == allowed &&
+                               !strcmp(result->device_name, peer->dev_name))
+               {
+                       WDS_LOGD("already exist");
+                       __WDS_LOG_FUNC_EXIT__;
+                       return res;
+               }else {
+
+                       result->allowed = allowed;
+                       strncpy(result->device_name, peer->dev_name, DEV_NAME_LEN);
+                       result->device_name[DEV_NAME_LEN] = '\0';
+                       res = wfd_util_rewrite_device_list_to_file(manager->access_list);
+                       if(res < 0)
+                       {
+                               WDS_LOGE("fail to modify the peer in access list file");
+                       }
+
+               }
+       }else {
+
+               res = wfd_util_add_device_to_list(peer, allowed);
+               if(res > 0)
+               {
+                       result = calloc(1, sizeof(wfd_access_list_info_s));
+                       strncpy(result->mac_address, peer->dev_addr, MACADDR_LEN);
+                       strncpy(result->device_name, peer->dev_name, DEV_NAME_LEN);
+                       result->device_name[DEV_NAME_LEN] = '\0';
+                       result->allowed = allowed;
+                       manager->access_list = g_list_append(manager->access_list, result);
+               }else {
+                       WDS_LOGE("fail to append peer to access list file");
+                       res = -1;
+               }
+       }
+       __WDS_LOG_FUNC_EXIT__;
+       return res;
+}
+
+int wfd_manager_del_from_access_list(wfd_manager_s *manager, unsigned char *mac)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       wfd_access_list_info_s *device = NULL;
+       GList *temp = NULL;
+       int res = 0;
+
+       device = _wfd_manager_get_device_from_access_list(manager, mac);
+       if(device)
+       {
+               manager->access_list = g_list_remove(manager->access_list , device);
+               free(device);
+
+               res = wfd_util_rewrite_device_list_to_file(manager->access_list);
+               if (res < 0)
+                       WDS_LOGE("fail to remove device from list file!");
+
+
+       }else if(!memcmp(mac,"\0x00\0x00\0x00\0x00\0x00\0x00",MACADDR_LEN)){
+
+               res = wfd_util_reset_access_list_file();
+               if(res == 0)
+               {
+                       g_list_foreach (manager->access_list, (GFunc)g_free, NULL);
+                       g_list_free (manager->access_list);
+                       manager->access_list = NULL;
+               }else {
+                       WDS_LOGE("fail to reset access list file");
+               }
+
+       }else {
+               WDS_LOGD("device dose not exist");
+       }
+       __WDS_LOG_FUNC_EXIT__;
+       return res;
+}
+
 static wfd_service_s *_wfd_service_find(wfd_device_s *device, wifi_direct_service_type_e type, char *data)
 {
        __WDS_LOG_FUNC_ENTER__;
@@ -1485,6 +1667,11 @@ static wfd_manager_s *wfd_manager_init()
        manager->req_wps_mode = WFD_WPS_MODE_PBC;
        manager->max_station = 8;
 
+       res = wfd_util_get_access_list(&(manager->access_list));
+       if (res < 0) {
+               WDS_LOGE("Failed to get access list");
+       }
+
        res = _wfd_local_init_device(manager);
        if (res < 0) {
                WDS_LOGE("Failed to initialize local device");
@@ -1515,6 +1702,10 @@ int wfd_manager_deinit(wfd_manager_s *manager)
                g_source_remove(manager->exit_timer);
        manager->exit_timer = 0;
 
+       g_list_foreach (manager->access_list, (GFunc)g_free, NULL);
+       g_list_free (manager->access_list);
+       manager->access_list = NULL;
+
        _wfd_local_deinit_device(manager);
 
        if (manager)
index 67d07f0..22e8085 100644 (file)
@@ -381,6 +381,154 @@ int wfd_util_get_local_dev_mac(unsigned char *dev_mac)
        return 0;
 }
 
+int wfd_util_get_access_list(GList **access_list)
+{
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_access_list_info_s * device = NULL;
+       char device_info[MACSTR_LEN + DEV_NAME_LEN + 1] = {0, };
+       char dev_mac[MACADDR_LEN] = {0, };
+       int info_str_len = 0;
+
+       FILE *fd = NULL;
+       int res = 0;
+
+
+       fd = fopen(DEFAULT_DEVICE_LIST_FILE_PATH, "r");
+       if (!fd) {
+               WDS_LOGE("Failed to open access list file (%s)", strerror(errno));
+               __WDS_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       while ((res = fgets(device_info, MACSTR_LEN + DEV_NAME_LEN + 2, fd)) != NULL)
+       {
+               if (device_info[0] == '\0') {
+                       printf("end of list\n");
+                       fclose(fd);
+                       return 0;
+               }
+
+               info_str_len = strlen(device_info);
+               if(info_str_len > MACSTR_LEN)
+                       device_info[info_str_len -1] = '\0';
+
+               res = _txt_to_mac(device_info, dev_mac);
+               if (res < 0) {
+                       WDS_LOGE("Failed to convert text to MAC address");
+                       continue;
+               }
+
+               device = calloc(1, sizeof(wfd_access_list_info_s));
+               memcpy(device->mac_address, dev_mac, MACADDR_LEN);
+               strncpy(device->device_name, &device_info[MACSTR_LEN], strlen(&device_info[MACSTR_LEN]));
+               device->allowed = (device_info[MACSTR_LEN - 1] == 'O');
+
+               *access_list = g_list_append(*access_list, device);
+       }
+       fclose(fd);
+       __WDS_LOG_FUNC_EXIT__;
+       return 0;
+}
+
+int wfd_util_rewrite_device_list_to_file(GList *access_list)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       FILE *fd = NULL;
+       GList *temp = NULL;
+       wfd_access_list_info_s * device = NULL;
+
+       int list_cnt =0;
+       char * buf = NULL;
+       char * ptr = NULL;
+
+       int res = 0;
+       int i;
+
+       list_cnt =  g_list_length(access_list);
+
+       fd = fopen(DEFAULT_DEVICE_LIST_FILE_PATH, "w");
+       if (!fd) {
+               WDS_LOGE("Failed to open access list file (%s)", strerror(errno));
+               free(buf);
+               __WDS_LOG_FUNC_EXIT__;
+               return -1;
+       }
+       if(list_cnt > 0)
+       {
+               buf = calloc(1,(MACSTR_LEN + DEV_NAME_LEN + 1)*list_cnt +1);
+               ptr = buf;
+               temp = g_list_first(access_list);
+
+               for(i =0; i < list_cnt; i++)
+               {
+                       device = (wfd_access_list_info_s *)temp->data;
+                       snprintf(ptr, MACSTR_LEN + DEV_NAME_LEN + 2, MACSTR "%c%s\n",
+                                         MAC2STR(device->mac_address), device->allowed?'O':'X', device->device_name);
+                       ptr+=strlen(ptr);
+                       temp = g_list_next(temp);
+               }
+               res = fprintf(fd, "%s",buf);
+       }
+
+       fclose(fd);
+       if(buf != NULL)
+               free(buf);
+       __WDS_LOG_FUNC_EXIT__;
+       return res;
+}
+
+int wfd_util_add_device_to_list(wfd_device_s *peer, int allowed)
+{
+       __WDS_LOG_FUNC_ENTER__;
+       FILE *fd = NULL;
+       char buf[MACSTR_LEN + DEV_NAME_LEN + 2] = {0, };
+       int res = 0;
+
+       if(peer == NULL)
+       {
+               WDS_LOGD("There is nothing to add to list");
+               return -1;
+       }
+
+       snprintf(buf, MACSTR_LEN + DEV_NAME_LEN + 2, MACSTR "%c%s\n",
+                       MAC2STR(peer->dev_addr), allowed?'O':'X', peer->dev_name);
+
+       fd = fopen(DEFAULT_DEVICE_LIST_FILE_PATH, "a");
+       if (!fd) {
+               WDS_LOGE("Failed to open access list file (%s)", strerror(errno));
+               __WDS_LOG_FUNC_EXIT__;
+               return -1;
+       }
+       res = fprintf(fd,"%s", buf);
+
+       if(res < 0)
+               WDS_LOGE("Failed to write to access list file (%s)", strerror(errno));
+
+       fclose(fd);
+       __WDS_LOG_FUNC_EXIT__;
+       return res;
+}
+
+int wfd_util_reset_access_list_file()
+{
+       __WDS_LOG_FUNC_ENTER__;
+       int res = 0;
+
+       FILE *fd = NULL;
+       fd = fopen(DEFAULT_DEVICE_LIST_FILE_PATH, "w");
+
+       if (!fd) {
+               WDS_LOGE("Failed to open reset access list file (%s)", strerror(errno));
+               res = -1;
+       }
+       fclose(fd);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return 0;
+
+}
+
 int wfd_util_start_wifi_direct_popup()
 {
        __WDS_LOG_FUNC_ENTER__;