/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/mandosclient.c

plugbasedclient
        change uid to nobody:nogroup as default for all plugins

mandosclient
        Takes up the interface if needed

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
#include <stdlib.h>
40
40
#include <time.h>
41
41
#include <net/if.h>             /* if_nametoindex */
 
42
#include <sys/ioctl.h>          // ioctl, ifreq, SIOCGIFFLAGS, IFF_UP, SIOCSIFFLAGS
 
43
#include <net/if.h>             // ioctl, ifreq, SIOCGIFFLAGS, IFF_UP, SIOCSIFFLAGS
42
44
 
43
45
#include <avahi-core/core.h>
44
46
#include <avahi-core/lookup.h>
372
374
    perror("socket");
373
375
    return -1;
374
376
  }
375
 
  
376
 
  if(if_indextoname(if_index, interface) == NULL){
377
 
    if(debug){
378
 
      perror("if_indextoname");
 
377
 
 
378
  if(debug){
 
379
    if(if_indextoname(if_index, interface) == NULL){
 
380
      if(debug){
 
381
        perror("if_indextoname");
 
382
      }
 
383
      return -1;
379
384
    }
380
 
    return -1;
381
 
  }
382
 
  
383
 
  if(debug){
 
385
    
384
386
    fprintf(stderr, "Binding to interface %s\n", interface);
385
387
  }
386
388
  
487
489
                                               &decrypted_buffer,
488
490
                                               certdir);
489
491
    if (decrypted_buffer_size >= 0){
490
 
      while(written < decrypted_buffer_size){
 
492
      while(written < (size_t)decrypted_buffer_size){
491
493
        ret = (int)fwrite (decrypted_buffer + written, 1,
492
494
                           (size_t)decrypted_buffer_size - written,
493
495
                           stdout);
645
647
    int ret;
646
648
    int returncode = EXIT_SUCCESS;
647
649
    const char *interface = "eth0";
 
650
    struct ifreq network;
 
651
    int sd;
648
652
    
649
653
    while (true){
650
654
      static struct option long_options[] = {
685
689
 
686
690
    certfile = combinepath(certdir, certfile);
687
691
    if (certfile == NULL){
 
692
      returncode = EXIT_FAILURE;
688
693
      goto exit;
689
694
    }
690
695
    
691
696
    certkey = combinepath(certdir, certkey);
692
697
    if (certkey == NULL){
693
 
      goto exit;
694
 
    }
695
 
        
 
698
      returncode = EXIT_FAILURE;
 
699
      goto exit;
 
700
    }
 
701
 
 
702
    sd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
 
703
    if(sd < 0) {
 
704
      perror("socket");
 
705
      returncode = EXIT_FAILURE;
 
706
      goto exit;
 
707
    }
 
708
    strcpy(network.ifr_name, interface);    
 
709
    ret = ioctl(sd, SIOCGIFFLAGS, &network);
 
710
    if(ret == -1){
 
711
      
 
712
      perror("ioctl SIOCGIFFLAGS");
 
713
      returncode = EXIT_FAILURE;
 
714
      goto exit;
 
715
    }
 
716
    if((network.ifr_flags & IFF_UP) == 0){
 
717
      network.ifr_flags |= IFF_UP;
 
718
      ret = ioctl(sd, SIOCSIFFLAGS, &network);
 
719
      if(ret == -1){
 
720
        perror("ioctl SIOCSIFFLAGS");
 
721
        returncode = EXIT_FAILURE;
 
722
        goto exit;
 
723
      }
 
724
    }
 
725
    close(sd);
 
726
    
696
727
    if (not debug){
697
728
      avahi_set_log_function(empty_log);
698
729
    }
703
734
    /* Allocate main loop object */
704
735
    if (!(simple_poll = avahi_simple_poll_new())) {
705
736
        fprintf(stderr, "Failed to create simple poll object.\n");
706
 
        
 
737
        returncode = EXIT_FAILURE;      
707
738
        goto exit;
708
739
    }
709
740