3 int find_trusted_paired_device(FILE *log_fp, 
char **trusted_devices, 
int num_of_devices, 
char **paired_devices, 
int num_of_paired, 
char **detected_dev) {
 
    4     if (!trusted_devices || !paired_devices) {
 
    7     int trusted_dev_found = 0;
 
    9     for (
int i = 0; i < num_of_paired; i++) {
 
   10         if (
is_dev_trusted(log_fp, paired_devices[i], trusted_devices, num_of_devices)) {
 
   12                 fprintf(log_fp, 
"Trusted Device: %s\n", paired_devices[i]);
 
   14             if ((*detected_dev = malloc(
sizeof(
char) * (
BT_MAC_LEN + 1)))) {
 
   15                 strncpy(*detected_dev, paired_devices[i], 
BT_MAC_LEN);
 
   18             trusted_dev_found = 1;
 
   23     return trusted_dev_found;
 
   31     FILE *trusted_dev_fp = NULL;
 
   33     const unsigned int buf_size = PATH_MAX + LOGIN_NAME_MAX;
 
   34     char file_name[buf_size]; 
 
   35     unsigned int copy_len = 0;
 
   37     strcpy(file_name, 
"");
 
   41         copy_len = copy_len > (PATH_MAX -1) ? (PATH_MAX - 1): copy_len; 
 
   46     assert(strlen(file_name) < buf_size);
 
   48     if (strlen(username) > 0) {
 
   49         copy_len = strlen(username);
 
   50         copy_len = (copy_len > LOGIN_NAME_MAX) ? LOGIN_NAME_MAX : copy_len;
 
   51         strncat(file_name, username, copy_len);
 
   55     assert(strlen(file_name) < buf_size);
 
   59         file_name[buf_size-1] = 
'\0';
 
   62         file_name[len] = 
'\0';
 
   69     if (!(trusted_dev_fp = fopen(file_name, 
"r"))) {
 
   70         perror(
"There are no trusted device");
 
   72             fprintf(log_fp, 
"File: %s does not exist. There are no trusted device for the user: %s\n", file_name, username);
 
   75         fprintf(stderr, 
"File: %s does not exist. There are no trusted device for the user: %s\n", file_name, username);
 
   78     return trusted_dev_fp;
 
   89     if (trusted_dev_fp && trusted_devices && num_trusted_devices > 0) {
 
   90         fseek(trusted_dev_fp, 0, SEEK_SET);
 
   91         while ((read = getline(&line, &len, trusted_dev_fp)) != -1 && i < num_trusted_devices) {
 
   92             if (strcmp(line, 
"\n") != 0) {
 
   93                 dev = trusted_devices + i;
 
   95                 if ((*dev = malloc(
sizeof(
char) * (
BT_MAC_LEN + 1)))) {
 
  110     char **trusted_devices = NULL;
 
  111     FILE *trusted_dev_fp = NULL;
 
  112     int num_of_devices_lc = 0; 
 
  115       goto find_trusted_devices_terminate;
 
  120         goto find_trusted_devices_terminate;
 
  125         goto find_trusted_devices_terminate;
 
  129         goto find_trusted_devices_terminate;
 
  132     if (!(trusted_devices = malloc(
sizeof(
char *) * num_of_devices_lc))) {
 
  134         goto find_trusted_devices_terminate;
 
  139 find_trusted_devices_terminate:
 
  140     if (trusted_dev_fp) {
 
  141         fclose(trusted_dev_fp);
 
  144     *num_of_devices = num_of_devices_lc;
 
  145     return trusted_devices;
 
  149     int bluetooth_status = 0;
 
  152     int num_of_devices = 0;
 
  153     int num_of_paired = 0;
 
  155     char **trusted_devices = NULL;
 
  157     *detected_dev = NULL;
 
  160         goto bluetooth_login_terminate;
 
  168         fprintf(log_fp, 
"%s: Call find device\n", curr_time);
 
  171     if (paired_devices && (bluetooth_status = 
find_trusted_paired_device(log_fp, trusted_devices, num_of_devices, paired_devices, num_of_paired, detected_dev))) {
 
  172         if (log_fp && *detected_dev) {
 
  173             fprintf(log_fp, 
"%s: Device %s found\n", curr_time, *detected_dev);
 
  178             fprintf(log_fp, 
"%s: No trusted devices was found %d\n", curr_time, bluetooth_status);
 
  182 bluetooth_login_terminate:
 
  183     if (trusted_devices) {
 
  187     if (paired_devices) {
 
  191     return bluetooth_status;
 
void free_device_list(char **device_list, int num_of_devices)
 
const char * trusted_dir_path
 
int is_dev_trusted(FILE *log_fp, char *dev, char **trusted_devices, int num_of_devices)
 
char ** get_paired_devices(int *num_of_paired)
 
int bluetooth_login(FILE *log_fp, const char *trusted_dir_path, const char *username, char **detected_dev)
 
char ** find_trusted_devices(FILE *log_fp, const char *trusted_dir_path, const char *username, int *num_of_devices)
 
FILE * get_trusted_dev_file(const char *trusted_dir_path, const char *username, FILE *log_fp)
 
int find_trusted_paired_device(FILE *log_fp, char **trusted_devices, int num_of_devices, char **paired_devices, int num_of_paired, char **detected_dev)
 
void set_trusted_devices(FILE *trusted_dev_fp, char **trusted_devices, int num_trusted_devices)
 
int get_num_lines(FILE *fp)
 
void get_login_time(char *curr_time)
 
int check_config(FILE *log_fp, const char *const file, const int is_dir)
: Where security checks and security tools are placed