/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/password-request.c

merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
#include <string.h>             /* memset(), strcmp(), strlen(),
45
45
                                   strerror(), memcpy(), strcpy() */
46
46
#include <sys/ioctl.h>          /* ioctl */
 
47
#include <net/if.h>             /* ifreq, SIOCGIFFLAGS, SIOCSIFFLAGS,
 
48
                                   IFF_UP */
47
49
#include <sys/types.h>          /* socket(), inet_pton(), sockaddr,
48
50
                                   sockaddr_in6, PF_INET6,
49
51
                                   SOCK_STREAM, INET6_ADDRSTRLEN,
485
487
    fprintf(stderr, "Bad address: %s\n", ip);
486
488
    return -1;
487
489
  }
488
 
  to.in6.sin6_port = htons(port); /* Spurious warning */
 
490
  to.in6.sin6_port = htons(port);       /* Spurious warning */
489
491
  
490
492
  to.in6.sin6_scope_id = (uint32_t)if_index;
491
493
  
682
684
      }
683
685
      int ret = start_mandos_communication(ip, port, interface, mc);
684
686
      if (ret == 0){
685
 
        avahi_simple_poll_quit(mc->simple_poll);
 
687
        exit(EXIT_SUCCESS);
686
688
      }
687
689
    }
688
690
  }
850
852
          break;
851
853
        case ARGP_KEY_ARG:
852
854
          argp_usage (state);
853
 
        case ARGP_KEY_END:
854
855
          break;
 
856
          case ARGP_KEY_END:
 
857
            break;
855
858
        default:
856
859
          return ARGP_ERR_UNKNOWN;
857
860
        }
864
867
                           " passwords from mandos server" };
865
868
      ret = argp_parse (&argp, argc, argv, 0, 0, NULL);
866
869
      if (ret == ARGP_ERR_UNKNOWN){
867
 
        fprintf(stderr, "Unknown error while parsing arguments\n");
 
870
        fprintf(stderr, "Unkown error while parsing arguments\n");
868
871
        exitcode = EXIT_FAILURE;
869
872
        goto end;
870
873
      }
880
883
    seckeyfile = combinepath(keydir, seckeyfile);
881
884
    if (seckeyfile == NULL){
882
885
      perror("combinepath");
883
 
      exitcode = EXIT_FAILURE;
884
886
      goto end;
885
887
    }
886
888
 
887
889
    ret = init_gnutls_global(&mc, pubkeyfile, seckeyfile);
888
890
    if (ret == -1){
889
 
      fprintf(stderr, "init_gnutls_global failed\n");
890
 
      exitcode = EXIT_FAILURE;
 
891
      fprintf(stderr, "init_gnutls_global\n");
891
892
      goto end;
892
893
    } else {
893
894
      gnutls_initalized = true;
894
895
    }
895
 
    
896
 
    /* If the interface is down, bring it up */
897
 
    {
898
 
      sd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
899
 
      if(sd < 0) {
900
 
        perror("socket");
901
 
        exitcode = EXIT_FAILURE;
902
 
        goto end;
903
 
      }
904
 
      strcpy(network.ifr_name, interface); /* Spurious warning */
905
 
      ret = ioctl(sd, SIOCGIFFLAGS, &network);
906
 
      if(ret == -1){
907
 
        perror("ioctl SIOCGIFFLAGS");
908
 
        exitcode = EXIT_FAILURE;
909
 
        goto end;
910
 
      }
911
 
      if((network.ifr_flags & IFF_UP) == 0){
912
 
        network.ifr_flags |= IFF_UP;
913
 
        ret = ioctl(sd, SIOCSIFFLAGS, &network);
914
 
        if(ret == -1){
915
 
          perror("ioctl SIOCSIFFLAGS");
916
 
          exitcode = EXIT_FAILURE;
917
 
          goto end;
918
 
        }
919
 
      }
920
 
      close(sd);
921
 
    }
922
 
    
 
896
 
923
897
    uid = getuid();
924
898
    gid = getgid();
925
 
    
 
899
 
926
900
    ret = setuid(uid);
927
901
    if (ret == -1){
928
902
      perror("setuid");
966
940
      goto end;
967
941
    }
968
942
    
 
943
    /* If the interface is down, bring it up */
 
944
    {
 
945
      sd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
 
946
      if(sd < 0) {
 
947
        perror("socket");
 
948
        exitcode = EXIT_FAILURE;
 
949
        goto end;
 
950
      }
 
951
      strcpy(network.ifr_name, interface); /* Spurious warning */
 
952
      ret = ioctl(sd, SIOCGIFFLAGS, &network);
 
953
      if(ret == -1){
 
954
        perror("ioctl SIOCGIFFLAGS");
 
955
        exitcode = EXIT_FAILURE;
 
956
        goto end;
 
957
      }
 
958
      if((network.ifr_flags & IFF_UP) == 0){
 
959
        network.ifr_flags |= IFF_UP;
 
960
        ret = ioctl(sd, SIOCSIFFLAGS, &network);
 
961
        if(ret == -1){
 
962
          perror("ioctl SIOCSIFFLAGS");
 
963
          exitcode = EXIT_FAILURE;
 
964
          goto end;
 
965
        }
 
966
      }
 
967
      close(sd);
 
968
    }
 
969
    
969
970
    if (not debug){
970
971
      avahi_set_log_function(empty_log);
971
972
    }