/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

not working midwork...

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
#define _LARGEFILE_SOURCE
33
33
#define _FILE_OFFSET_BITS 64
34
34
 
35
 
#define _GNU_SOURCE             /* TEMP_FAILURE_RETRY() */
36
 
 
37
35
#include <stdio.h>
38
36
#include <assert.h>
39
37
#include <stdlib.h>
79
77
 
80
78
bool debug = false;
81
79
 
82
 
const char mandos_protocol_version[] = "1";
83
 
 
84
80
typedef struct {
85
81
  AvahiSimplePoll *simple_poll;
86
82
  AvahiServer *server;
89
85
  const char *priority;
90
86
} mandos_context;
91
87
 
92
 
size_t adjustbuffer(char *buffer, size_t buffer_length,
93
 
                  size_t buffer_capacity){
94
 
  if (buffer_length + BUFFER_SIZE > buffer_capacity){
95
 
    buffer = realloc(buffer, buffer_capacity + BUFFER_SIZE);
96
 
    if (buffer == NULL){
97
 
      return 0;
98
 
    }
99
 
    buffer_capacity += BUFFER_SIZE;
100
 
  }
101
 
  return buffer_capacity;
102
 
}
103
 
 
104
88
static ssize_t pgp_packet_decrypt (char *packet, size_t packet_size,
105
89
                                   char **new_packet,
106
90
                                   const char *homedir){
108
92
  gpgme_ctx_t ctx;
109
93
  gpgme_error_t rc;
110
94
  ssize_t ret;
111
 
  size_t new_packet_capacity = 0;
 
95
  ssize_t new_packet_capacity = 0;
112
96
  ssize_t new_packet_length = 0;
113
97
  gpgme_engine_info_t engine_info;
114
98
 
221
205
  
222
206
  *new_packet = 0;
223
207
  while(true){
224
 
    new_packet_capacity = adjustbuffer(*new_packet, new_packet_length,
225
 
                                       new_packet_capacity);
226
 
    if (new_packet_capacity == 0){
227
 
        perror("adjustbuffer");
 
208
    if (new_packet_length + BUFFER_SIZE > new_packet_capacity){
 
209
      *new_packet = realloc(*new_packet,
 
210
                            (unsigned int)new_packet_capacity
 
211
                            + BUFFER_SIZE);
 
212
      if (*new_packet == NULL){
 
213
        perror("realloc");
228
214
        return -1;
229
215
      }
230
216
      new_packet_capacity += BUFFER_SIZE;
376
362
  size_t buffer_length = 0;
377
363
  size_t buffer_capacity = 0;
378
364
  ssize_t decrypted_buffer_size;
379
 
  size_t written;
 
365
  size_t written = 0;
380
366
  int retval = 0;
381
367
  char interface[IF_NAMESIZE];
382
368
  
434
420
    perror("connect");
435
421
    return -1;
436
422
  }
437
 
 
438
 
  char *out = mandos_protocol_version;
439
 
  written = 0;
440
 
  while (true){
441
 
    size_t out_size = strlen(out);
442
 
    ret = TEMP_FAILURE_RETRY(write(tcp_sd, out + written,
443
 
                                   out_size - written));
444
 
    if (ret == -1){
445
 
      perror("write");
446
 
      retval = -1;
447
 
      goto end;
448
 
    }
449
 
    written += ret;
450
 
    if(written < out_size){
451
 
      continue;
452
 
    } else {
453
 
      if (out == mandos_protocol_version){
454
 
        written = 0;
455
 
        out = "\r\n";
456
 
      } else {
457
 
        break;
458
 
      }
459
 
    }
460
 
  }
461
 
 
 
423
  
462
424
  ret = initgnutls (&es);
463
425
  if (ret != 0){
464
426
    retval = -1;
491
453
  }
492
454
 
493
455
  while(true){
494
 
    buffer_capacity = adjustbuffer(buffer, buffer_length, buffer_capacity);
495
 
    if (buffer_capacity == 0){
496
 
      perror("adjustbuffer");
497
 
      retval = -1;
498
 
      goto exit;
 
456
    if (buffer_length + BUFFER_SIZE > buffer_capacity){
 
457
      buffer = realloc(buffer, buffer_capacity + BUFFER_SIZE);
 
458
      if (buffer == NULL){
 
459
        perror("realloc");
 
460
        goto exit;
 
461
      }
 
462
      buffer_capacity += BUFFER_SIZE;
499
463
    }
500
464
    
501
465
    ret = gnutls_record_recv
535
499
                                               &decrypted_buffer,
536
500
                                               certdir);
537
501
    if (decrypted_buffer_size >= 0){
538
 
      written = 0;
539
502
      while(written < (size_t) decrypted_buffer_size){
540
503
        ret = (int)fwrite (decrypted_buffer + written, 1,
541
504
                           (size_t)decrypted_buffer_size - written,