/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

  • Committer: Teddy Hogeborn
  • Date: 2008-09-03 05:04:40 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080903050440-7cwzxestx6pvdy1i
* Makefile (mandos.8): Add dependency on "overview.xml" and
                       "legalnotice.xml".
  (mandos-keygen.8): New target.
  (mandos-conf.5): Added dependency on "legalnotice.xml".
  (plugin-runner.8mandos): New target
  (plugins.d/password-request.8mandos): - '' -

* mandos-options.xml (priority): Make wording server/client neutral.

* plugins.d/password-request.c (main): Changed .arg fields of the argp
                                       options struct to be more
                                       consistent with the manual.

* plugins.d/password-request.xml (OVERVIEW): Moved to after "OPTIONS".
  (OPTIONS): Improved wording and names of replaceables.

Show diffs side-by-side

added added

removed removed

Lines of Context:
281
281
    }
282
282
    plaintext_length += ret;
283
283
  }
284
 
 
 
284
  
285
285
  if(debug){
286
286
    fprintf(stderr, "Decrypted password is: ");
287
287
    for(ssize_t i = 0; i < plaintext_length; i++){
380
380
  }
381
381
  
382
382
  gnutls_certificate_set_dh_params(mc->cred, mc->dh_params);
383
 
 
 
383
  
384
384
  return 0;
385
 
 
 
385
  
386
386
 globalfail:
387
 
 
 
387
  
388
388
  gnutls_certificate_free_credentials(mc->cred);
389
389
  gnutls_global_deinit();
390
390
  return -1;
391
 
 
392
391
}
393
392
 
394
393
static int init_gnutls_session(mandos_context *mc,
466
465
    perror("socket");
467
466
    return -1;
468
467
  }
469
 
 
 
468
  
470
469
  if(debug){
471
470
    if(if_indextoname((unsigned int)if_index, interface) == NULL){
472
471
      perror("if_indextoname");
511
510
    perror("connect");
512
511
    return -1;
513
512
  }
514
 
 
 
513
  
515
514
  const char *out = mandos_protocol_version;
516
515
  written = 0;
517
516
  while (true){
535
534
      }
536
535
    }
537
536
  }
538
 
 
 
537
  
539
538
  if(debug){
540
539
    fprintf(stderr, "Establishing TLS session with %s\n", ip);
541
540
  }
542
541
  
543
542
  gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) tcp_sd);
544
 
 
 
543
  
545
544
  do{
546
545
    ret = gnutls_handshake (session);
547
546
  } while(ret == GNUTLS_E_AGAIN or ret == GNUTLS_E_INTERRUPTED);
561
560
    fprintf(stderr, "Retrieving pgp encrypted password from %s\n",
562
561
            ip);
563
562
  }
564
 
 
 
563
  
565
564
  while(true){
566
565
    buffer_capacity = adjustbuffer(&buffer, buffer_length,
567
566
                                   buffer_capacity);
783
782
        { .name = "debug", .key = 128,
784
783
          .doc = "Debug mode", .group = 3 },
785
784
        { .name = "connect", .key = 'c',
786
 
          .arg = "IP",
787
 
          .doc = "Connect directly to a sepcified mandos server",
 
785
          .arg = "ADDRESS:PORT",
 
786
          .doc = "Connect directly to a specific Mandos server",
788
787
          .group = 1 },
789
788
        { .name = "interface", .key = 'i',
790
 
          .arg = "INTERFACE",
791
 
          .doc = "Interface that Avahi will conntect through",
 
789
          .arg = "NAME",
 
790
          .doc = "Interface that will be used to search for Mandos"
 
791
          " servers",
792
792
          .group = 1 },
793
793
        { .name = "keydir", .key = 'd',
794
 
          .arg = "KEYDIR",
795
 
          .doc = "Directory where the openpgp keyring is",
 
794
          .arg = "DIRECTORY",
 
795
          .doc = "Directory to read the OpenPGP key files from",
796
796
          .group = 1 },
797
797
        { .name = "seckey", .key = 's',
798
 
          .arg = "SECKEY",
799
 
          .doc = "Secret openpgp key for gnutls authentication",
 
798
          .arg = "FILE",
 
799
          .doc = "OpenPGP secret key file base name",
800
800
          .group = 1 },
801
801
        { .name = "pubkey", .key = 'p',
802
 
          .arg = "PUBKEY",
803
 
          .doc = "Public openpgp key for gnutls authentication",
 
802
          .arg = "FILE",
 
803
          .doc = "OpenPGP public key file base name",
804
804
          .group = 2 },
805
805
        { .name = "dh-bits", .key = 129,
806
806
          .arg = "BITS",
807
 
          .doc = "dh-bits to use in gnutls communication",
 
807
          .doc = "Bit length of the prime number used in the"
 
808
          " Diffie-Hellman key exchange",
808
809
          .group = 2 },
809
810
        { .name = "priority", .key = 130,
810
 
          .arg = "PRIORITY",
811
 
          .doc = "GNUTLS priority", .group = 1 },
 
811
          .arg = "STRING",
 
812
          .doc = "GnuTLS priority string for the TLS handshake",
 
813
          .group = 1 },
812
814
        { .name = NULL }
813
815
      };
814
 
 
815
816
      
816
817
      error_t parse_opt (int key, char *arg,
817
818
                         struct argp_state *state) {
856
857
        }
857
858
        return 0;
858
859
      }
859
 
 
 
860
      
860
861
      struct argp argp = { .options = options, .parser = parse_opt,
861
862
                           .args_doc = "",
862
863
                           .doc = "Mandos client -- Get and decrypt"
863
 
                           " passwords from mandos server" };
 
864
                           " passwords from a Mandos server" };
864
865
      ret = argp_parse (&argp, argc, argv, 0, 0, NULL);
865
866
      if (ret == ARGP_ERR_UNKNOWN){
866
867
        fprintf(stderr, "Unknown error while parsing arguments\n");
868
869
        goto end;
869
870
      }
870
871
    }
871
 
      
 
872
    
872
873
    pubkeyfilename = combinepath(keydir, pubkeyname);
873
874
    if (pubkeyfilename == NULL){
874
875
      perror("combinepath");
882
883
      exitcode = EXIT_FAILURE;
883
884
      goto end;
884
885
    }
885
 
 
 
886
    
886
887
    ret = init_gnutls_global(&mc, pubkeyfilename, seckeyfilename);
887
888
    if (ret == -1){
888
889
      fprintf(stderr, "init_gnutls_global failed\n");
980
981
        exitcode = EXIT_FAILURE;
981
982
        goto end;
982
983
    }
983
 
 
 
984
    
984
985
    {
985
986
      AvahiServerConfig config;
986
987
      /* Do not publish any local Zeroconf records */
989
990
      config.publish_addresses = 0;
990
991
      config.publish_workstation = 0;
991
992
      config.publish_domain = 0;
992
 
 
 
993
      
993
994
      /* Allocate a new server */
994
995
      mc.server = avahi_server_new(avahi_simple_poll_get
995
996
                                   (mc.simple_poll), &config, NULL,
996
997
                                   NULL, &error);
997
 
    
 
998
      
998
999
      /* Free the Avahi configuration data */
999
1000
      avahi_server_config_free(&config);
1000
1001
    }
1020
1021
    }
1021
1022
    
1022
1023
    /* Run the main loop */
1023
 
 
 
1024
    
1024
1025
    if (debug){
1025
1026
      fprintf(stderr, "Starting Avahi loop search\n");
1026
1027
    }
1028
1029
    avahi_simple_poll_loop(mc.simple_poll);
1029
1030
    
1030
1031
 end:
1031
 
 
 
1032
    
1032
1033
    if (debug){
1033
1034
      fprintf(stderr, "%s exiting\n", argv[0]);
1034
1035
    }
1039
1040
    
1040
1041
    if (mc.server != NULL)
1041
1042
        avahi_server_free(mc.server);
1042
 
 
 
1043
    
1043
1044
    if (mc.simple_poll != NULL)
1044
1045
        avahi_simple_poll_free(mc.simple_poll);
1045
1046
    free(pubkeyfilename);
1046
1047
    free(seckeyfilename);
1047
 
 
 
1048
    
1048
1049
    if (gnutls_initalized){
1049
1050
      gnutls_certificate_free_credentials(mc.cred);
1050
1051
      gnutls_global_deinit ();