/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/mandos-client.c

  • Committer: teddy at bsnet
  • Date: 2010-08-11 20:06:18 UTC
  • mto: This revision was merged to the branch mainline in revision 419.
  • Revision ID: teddy@fukt.bsnet.se-20100811200618-1uuv7p6cmrb2cmxu
* plugins.d/mandos-client.c: Added debug output.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1001
1001
  typedef short ifreq_flags;    /* ifreq.ifr_flags in netdevice(7) */
1002
1002
  /* read line from flags_fd */
1003
1003
  ssize_t to_read = (sizeof(ifreq_flags)*2)+3; /* "0x1003\n" */
1004
 
  char *flagstring = malloc((size_t)to_read);
 
1004
  char *flagstring = malloc((size_t)to_read+1); /* +1 for final \0 */
 
1005
  flagstring[(size_t)to_read] = '\0';
1005
1006
  if(flagstring == NULL){
1006
1007
    perror("malloc");
1007
1008
    close(flags_fd);
1029
1030
  if(errno != 0 or tmp == flagstring or (*tmp != '\0'
1030
1031
                                         and not (isspace(*tmp)))
1031
1032
     or tmpmax != (ifreq_flags)tmpmax){
 
1033
    if(debug){
 
1034
      fprintf(stderr, "Invalid flags \"%s\" for interface \"%s\"\n",
 
1035
              flagstring, if_entry->d_name);
 
1036
    }
1032
1037
    free(flagstring);
1033
1038
    return 0;
1034
1039
  }
1036
1041
  ifreq_flags flags = (ifreq_flags)tmpmax;
1037
1042
  /* Reject the loopback device */
1038
1043
  if(flags & IFF_LOOPBACK){
 
1044
    if(debug){
 
1045
      fprintf(stderr, "Rejecting loopback interface \"%s\"\n",
 
1046
              if_entry->d_name);
 
1047
    }
1039
1048
    return 0;
1040
1049
  }
1041
1050
  /* Accept point-to-point devices only if connect_to is specified */
1042
1051
  if(connect_to != NULL and (flags & IFF_POINTOPOINT)){
 
1052
    if(debug){
 
1053
      fprintf(stderr, "Accepting point-to-point interface \"%s\"\n",
 
1054
              if_entry->d_name);
 
1055
    }
1043
1056
    return 1;
1044
1057
  }
1045
1058
  /* Otherwise, reject non-broadcast-capable devices */
1046
1059
  if(not (flags & IFF_BROADCAST)){
 
1060
    if(debug){
 
1061
      fprintf(stderr, "Rejecting non-broadcast interface \"%s\"\n",
 
1062
              if_entry->d_name);
 
1063
    }
1047
1064
    return 0;
1048
1065
  }
1049
1066
  /* Accept this device */
 
1067
  if(debug){
 
1068
    fprintf(stderr, "Interface \"%s\" is acceptable\n",
 
1069
            if_entry->d_name);
 
1070
  }
1050
1071
  return 1;
1051
1072
}
1052
1073
 
1206
1227
    if(ret >= 1){
1207
1228
      /* Pick the first good interface */
1208
1229
      interface = strdup(direntries[0]->d_name);
 
1230
      if(debug){
 
1231
        fprintf(stderr, "Using interface \"%s\"\n", interface);
 
1232
      }
1209
1233
      if(interface == NULL){
1210
1234
        perror("malloc");
1211
1235
        free(direntries);
1373
1397
      ret = ioctl(sd, SIOCSIFFLAGS, &network);
1374
1398
      if(ret == -1){
1375
1399
        take_down_interface = false;
1376
 
        perror("ioctl SIOCSIFFLAGS");
 
1400
        perror("ioctl SIOCSIFFLAGS +IFF_UP");
1377
1401
        exitcode = EXIT_FAILURE;
1378
1402
#ifdef __linux__
1379
1403
        if(restore_loglevel){
1630
1654
        network.ifr_flags &= ~IFF_UP; /* clear flag */
1631
1655
        ret = ioctl(sd, SIOCSIFFLAGS, &network);
1632
1656
        if(ret == -1){
1633
 
          perror("ioctl SIOCSIFFLAGS");
 
1657
          perror("ioctl SIOCSIFFLAGS -IFF_UP");
1634
1658
        }
1635
1659
      }
1636
1660
      ret = (int)TEMP_FAILURE_RETRY(close(sd));