/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

Earlier signal handling

Show diffs side-by-side

added added

removed removed

Lines of Context:
131
131
} mandos_context;
132
132
 
133
133
/* global context so signal handler can reach it*/
134
 
mandos_context mc;
 
134
mandos_context mc = { .simple_poll = NULL, .server = NULL,
 
135
                      .dh_bits = 1024, .priority = "SECURE256"
 
136
                      ":!CTYPE-X.509:+CTYPE-OPENPGP" };
135
137
 
136
138
/*
137
139
 * Make additional room in "buffer" for at least BUFFER_SIZE
869
871
  }
870
872
}
871
873
 
 
874
/* stop main loop after sigterm has been called */
872
875
static void handle_sigterm(__attribute__((unused)) int sig){
873
876
  int old_errno = errno;
874
877
  avahi_simple_poll_quit(mc.simple_poll);
901
904
  struct sigaction old_sigterm_action;
902
905
  struct sigaction sigterm_action = { .sa_handler = handle_sigterm };
903
906
 
904
 
  /* Initialize mandos context */
905
 
  mc = (mandos_context){ .simple_poll = NULL, .server = NULL,
906
 
                         .dh_bits = 1024, .priority = "SECURE256"
907
 
                         ":!CTYPE-X.509:+CTYPE-OPENPGP" };
908
 
  
909
907
  {
910
908
    struct argp_option options[] = {
911
909
      { .name = "debug", .key = 128,
1001
999
      goto end;
1002
1000
    }
1003
1001
  }
 
1002
 
 
1003
  if(not debug){
 
1004
    avahi_set_log_function(empty_log);
 
1005
  }
 
1006
 
 
1007
  /* Initialize Avahi early so avahi_simple_poll_quit() can be called
 
1008
     from the signal handler */
 
1009
  /* Initialize the pseudo-RNG for Avahi */
 
1010
  srand((unsigned int) time(NULL));
 
1011
  mc.simple_poll = avahi_simple_poll_new();
 
1012
  if(mc.simple_poll == NULL){
 
1013
    fprintf(stderr, "Avahi: Failed to create simple poll object.\n");
 
1014
    exitcode = EXIT_FAILURE;
 
1015
    goto end;
 
1016
  }
 
1017
 
 
1018
  sigemptyset(&sigterm_action.sa_mask);
 
1019
  ret = sigaddset(&sigterm_action.sa_mask, SIGTERM);
 
1020
  if(ret == -1){
 
1021
    perror("sigaddset");
 
1022
    exitcode = EXIT_FAILURE;
 
1023
    goto end;
 
1024
  }
 
1025
  ret = sigaction(SIGTERM, &sigterm_action, &old_sigterm_action);
 
1026
  if(ret == -1){
 
1027
    perror("sigaction");
 
1028
    exitcode = EXIT_FAILURE;
 
1029
    goto end;
 
1030
  }  
 
1031
 
1004
1032
  
1005
1033
  /* If the interface is down, bring it up */
1006
1034
  if(interface[0] != '\0'){
1172
1200
    }
1173
1201
    goto end;
1174
1202
  }
1175
 
  
1176
 
  if(not debug){
1177
 
    avahi_set_log_function(empty_log);
1178
 
  }
1179
 
  
1180
 
  /* Initialize the pseudo-RNG for Avahi */
1181
 
  srand((unsigned int) time(NULL));
1182
 
  
1183
 
  /* Allocate main Avahi loop object */
1184
 
  mc.simple_poll = avahi_simple_poll_new();
1185
 
  if(mc.simple_poll == NULL){
1186
 
    fprintf(stderr, "Avahi: Failed to create simple poll object.\n");
1187
 
    exitcode = EXIT_FAILURE;
1188
 
    goto end;
1189
 
  }
1190
 
  
 
1203
    
1191
1204
  {
1192
1205
    AvahiServerConfig config;
1193
1206
    /* Do not publish any local Zeroconf records */
1224
1237
    exitcode = EXIT_FAILURE;
1225
1238
    goto end;
1226
1239
  }
1227
 
 
1228
 
  sigemptyset(&sigterm_action.sa_mask);
1229
 
  ret = sigaddset(&sigterm_action.sa_mask, SIGTERM);
1230
 
  if(ret == -1){
1231
 
    perror("sigaddset");
1232
 
    exitcode = EXIT_FAILURE;
1233
 
    goto end;
1234
 
  }
1235
 
  ret = sigaction(SIGTERM, &sigterm_action, &old_sigterm_action);
1236
 
  if(ret == -1){
1237
 
    perror("sigaction");
1238
 
    exitcode = EXIT_FAILURE;
1239
 
    goto end;
1240
 
  }  
1241
1240
  
1242
1241
  /* Run the main loop */
1243
1242