/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 Hogeborn
  • Date: 2009-09-17 02:42:49 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090917024249-y6j76xtzz3i2vptv
* plugins.d/mandos-client.c (init_gnutls_session): Always fail and
                                                   return immediately
                                                   if interrupted by
                                                   signal.

Show diffs side-by-side

added added

removed removed

Lines of Context:
142
142
                      .dh_bits = 1024, .priority = "SECURE256"
143
143
                      ":!CTYPE-X.509:+CTYPE-OPENPGP" };
144
144
 
 
145
sig_atomic_t quit_now = 0;
 
146
int signal_received = 0;
 
147
 
145
148
/*
146
149
 * Make additional room in "buffer" for at least BUFFER_SIZE more
147
150
 * bytes. "buffer_capacity" is how much is currently allocated,
476
479
  /* GnuTLS session creation */
477
480
  do {
478
481
    ret = gnutls_init(session, GNUTLS_SERVER);
 
482
    if(quit_now){
 
483
      return -1;
 
484
    }
479
485
  } while(ret == GNUTLS_E_INTERRUPTED or ret == GNUTLS_E_AGAIN);
480
486
  if(ret != GNUTLS_E_SUCCESS){
481
487
    fprintf(stderr, "Error in GnuTLS session initialization: %s\n",
486
492
    const char *err;
487
493
    do {
488
494
      ret = gnutls_priority_set_direct(*session, mc.priority, &err);
 
495
      if(quit_now){
 
496
        gnutls_deinit(*session);
 
497
        return -1;
 
498
      }
489
499
    } while(ret == GNUTLS_E_INTERRUPTED or ret == GNUTLS_E_AGAIN);
490
500
    if(ret != GNUTLS_E_SUCCESS){
491
501
      fprintf(stderr, "Syntax error at: %s\n", err);
499
509
  do {
500
510
    ret = gnutls_credentials_set(*session, GNUTLS_CRD_CERTIFICATE,
501
511
                                 mc.cred);
 
512
    if(quit_now){
 
513
      gnutls_deinit(*session);
 
514
      return -1;
 
515
    }
502
516
  } while(ret == GNUTLS_E_INTERRUPTED or ret == GNUTLS_E_AGAIN);
503
517
  if(ret != GNUTLS_E_SUCCESS){
504
518
    fprintf(stderr, "Error setting GnuTLS credentials: %s\n",
519
533
static void empty_log(__attribute__((unused)) AvahiLogLevel level,
520
534
                      __attribute__((unused)) const char *txt){}
521
535
 
522
 
sig_atomic_t quit_now = 0;
523
 
int signal_received = 0;
524
 
 
525
536
/* Called when a Mandos server is found */
526
537
static int start_mandos_communication(const char *ip, uint16_t port,
527
538
                                      AvahiIfIndex if_index,
575
586
  }
576
587
  
577
588
  if(quit_now){
 
589
    retval = -1;
578
590
    goto mandos_end;
579
591
  }
580
592
  
620
632
  }
621
633
  
622
634
  if(quit_now){
 
635
    retval = -1;
623
636
    goto mandos_end;
624
637
  }
625
638
  
656
669
  }
657
670
  
658
671
  if(quit_now){
 
672
    retval = -1;
659
673
    goto mandos_end;
660
674
  }
661
675
  
671
685
  }
672
686
  
673
687
  if(quit_now){
 
688
    retval = -1;
674
689
    goto mandos_end;
675
690
  }
676
691
  
698
713
    }
699
714
  
700
715
    if(quit_now){
 
716
      retval = -1;
701
717
      goto mandos_end;
702
718
    }
703
719
  }
707
723
  }
708
724
  
709
725
  if(quit_now){
 
726
    retval = -1;
710
727
    goto mandos_end;
711
728
  }
712
729
  
713
730
  gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t) tcp_sd);
714
731
  
715
732
  if(quit_now){
 
733
    retval = -1;
716
734
    goto mandos_end;
717
735
  }
718
736
  
719
737
  do {
720
738
    ret = gnutls_handshake(session);
721
739
    if(quit_now){
 
740
      retval = -1;
722
741
      goto mandos_end;
723
742
    }
724
743
  } while(ret == GNUTLS_E_AGAIN or ret == GNUTLS_E_INTERRUPTED);
742
761
  while(true){
743
762
    
744
763
    if(quit_now){
 
764
      retval = -1;
745
765
      goto mandos_end;
746
766
    }
747
767
    
754
774
    }
755
775
    
756
776
    if(quit_now){
 
777
      retval = -1;
757
778
      goto mandos_end;
758
779
    }
759
780
    
772
793
          ret = gnutls_handshake(session);
773
794
          
774
795
          if(quit_now){
 
796
            retval = -1;
775
797
            goto mandos_end;
776
798
          }
777
799
        } while(ret == GNUTLS_E_AGAIN or ret == GNUTLS_E_INTERRUPTED);
799
821
  }
800
822
  
801
823
  if(quit_now){
802
 
    goto mandos_end;
803
 
  }
804
 
  
805
 
  gnutls_bye(session, GNUTLS_SHUT_RDWR);
806
 
  
807
 
  if(quit_now){
808
 
    goto mandos_end;
809
 
  }
 
824
    retval = -1;
 
825
    goto mandos_end;
 
826
  }
 
827
  
 
828
  do {
 
829
    ret = gnutls_bye(session, GNUTLS_SHUT_RDWR);
 
830
    if(quit_now){
 
831
      retval = -1;
 
832
      goto mandos_end;
 
833
    }
 
834
  } while(ret == GNUTLS_E_AGAIN or ret == GNUTLS_E_INTERRUPTED);
810
835
  
811
836
  if(buffer_length > 0){
812
837
    ssize_t decrypted_buffer_size;
818
843
      written = 0;
819
844
      while(written < (size_t) decrypted_buffer_size){
820
845
        if(quit_now){
 
846
          retval = -1;
821
847
          goto mandos_end;
822
848
        }
823
849