summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bio/bf_buff.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bio/bf_buff.c')
-rw-r--r--src/lib/libcrypto/bio/bf_buff.c120
1 files changed, 59 insertions, 61 deletions
diff --git a/src/lib/libcrypto/bio/bf_buff.c b/src/lib/libcrypto/bio/bf_buff.c
index 7912b88473..6ccda06596 100644
--- a/src/lib/libcrypto/bio/bf_buff.c
+++ b/src/lib/libcrypto/bio/bf_buff.c
@@ -59,28 +59,17 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <errno.h> 60#include <errno.h>
61#include "cryptlib.h" 61#include "cryptlib.h"
62#include "bio.h" 62#include <openssl/bio.h>
63#include "evp.h" 63
64 64static int buffer_write(BIO *h, const char *buf,int num);
65#ifndef NOPROTO 65static int buffer_read(BIO *h, char *buf, int size);
66static int buffer_write(BIO *h,char *buf,int num); 66static int buffer_puts(BIO *h, const char *str);
67static int buffer_read(BIO *h,char *buf,int size); 67static int buffer_gets(BIO *h, char *str, int size);
68static int buffer_puts(BIO *h,char *str); 68static long buffer_ctrl(BIO *h, int cmd, long arg1, void *arg2);
69static int buffer_gets(BIO *h,char *str,int size);
70static long buffer_ctrl(BIO *h,int cmd,long arg1,char *arg2);
71static int buffer_new(BIO *h); 69static int buffer_new(BIO *h);
72static int buffer_free(BIO *data); 70static int buffer_free(BIO *data);
73#else 71static long buffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);
74static int buffer_write(); 72#define DEFAULT_BUFFER_SIZE 4096
75static int buffer_read();
76static int buffer_puts();
77static int buffer_gets();
78static long buffer_ctrl();
79static int buffer_new();
80static int buffer_free();
81#endif
82
83#define DEFAULT_BUFFER_SIZE 1024
84 73
85static BIO_METHOD methods_buffer= 74static BIO_METHOD methods_buffer=
86 { 75 {
@@ -93,24 +82,24 @@ static BIO_METHOD methods_buffer=
93 buffer_ctrl, 82 buffer_ctrl,
94 buffer_new, 83 buffer_new,
95 buffer_free, 84 buffer_free,
85 buffer_callback_ctrl,
96 }; 86 };
97 87
98BIO_METHOD *BIO_f_buffer() 88BIO_METHOD *BIO_f_buffer(void)
99 { 89 {
100 return(&methods_buffer); 90 return(&methods_buffer);
101 } 91 }
102 92
103static int buffer_new(bi) 93static int buffer_new(BIO *bi)
104BIO *bi;
105 { 94 {
106 BIO_F_BUFFER_CTX *ctx; 95 BIO_F_BUFFER_CTX *ctx;
107 96
108 ctx=(BIO_F_BUFFER_CTX *)Malloc(sizeof(BIO_F_BUFFER_CTX)); 97 ctx=(BIO_F_BUFFER_CTX *)OPENSSL_malloc(sizeof(BIO_F_BUFFER_CTX));
109 if (ctx == NULL) return(0); 98 if (ctx == NULL) return(0);
110 ctx->ibuf=(char *)Malloc(DEFAULT_BUFFER_SIZE); 99 ctx->ibuf=(char *)OPENSSL_malloc(DEFAULT_BUFFER_SIZE);
111 if (ctx->ibuf == NULL) { Free(ctx); return(0); } 100 if (ctx->ibuf == NULL) { OPENSSL_free(ctx); return(0); }
112 ctx->obuf=(char *)Malloc(DEFAULT_BUFFER_SIZE); 101 ctx->obuf=(char *)OPENSSL_malloc(DEFAULT_BUFFER_SIZE);
113 if (ctx->obuf == NULL) { Free(ctx->ibuf); Free(ctx); return(0); } 102 if (ctx->obuf == NULL) { OPENSSL_free(ctx->ibuf); OPENSSL_free(ctx); return(0); }
114 ctx->ibuf_size=DEFAULT_BUFFER_SIZE; 103 ctx->ibuf_size=DEFAULT_BUFFER_SIZE;
115 ctx->obuf_size=DEFAULT_BUFFER_SIZE; 104 ctx->obuf_size=DEFAULT_BUFFER_SIZE;
116 ctx->ibuf_len=0; 105 ctx->ibuf_len=0;
@@ -124,26 +113,22 @@ BIO *bi;
124 return(1); 113 return(1);
125 } 114 }
126 115
127static int buffer_free(a) 116static int buffer_free(BIO *a)
128BIO *a;
129 { 117 {
130 BIO_F_BUFFER_CTX *b; 118 BIO_F_BUFFER_CTX *b;
131 119
132 if (a == NULL) return(0); 120 if (a == NULL) return(0);
133 b=(BIO_F_BUFFER_CTX *)a->ptr; 121 b=(BIO_F_BUFFER_CTX *)a->ptr;
134 if (b->ibuf != NULL) Free(b->ibuf); 122 if (b->ibuf != NULL) OPENSSL_free(b->ibuf);
135 if (b->obuf != NULL) Free(b->obuf); 123 if (b->obuf != NULL) OPENSSL_free(b->obuf);
136 Free(a->ptr); 124 OPENSSL_free(a->ptr);
137 a->ptr=NULL; 125 a->ptr=NULL;
138 a->init=0; 126 a->init=0;
139 a->flags=0; 127 a->flags=0;
140 return(1); 128 return(1);
141 } 129 }
142 130
143static int buffer_read(b,out,outl) 131static int buffer_read(BIO *b, char *out, int outl)
144BIO *b;
145char *out;
146int outl;
147 { 132 {
148 int i,num=0; 133 int i,num=0;
149 BIO_F_BUFFER_CTX *ctx; 134 BIO_F_BUFFER_CTX *ctx;
@@ -209,10 +194,7 @@ start:
209 goto start; 194 goto start;
210 } 195 }
211 196
212static int buffer_write(b,in,inl) 197static int buffer_write(BIO *b, const char *in, int inl)
213BIO *b;
214char *in;
215int inl;
216 { 198 {
217 int i,num=0; 199 int i,num=0;
218 BIO_F_BUFFER_CTX *ctx; 200 BIO_F_BUFFER_CTX *ctx;
@@ -285,11 +267,7 @@ start:
285 goto start; 267 goto start;
286 } 268 }
287 269
288static long buffer_ctrl(b,cmd,num,ptr) 270static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr)
289BIO *b;
290int cmd;
291long num;
292char *ptr;
293 { 271 {
294 BIO *dbio; 272 BIO *dbio;
295 BIO_F_BUFFER_CTX *ctx; 273 BIO_F_BUFFER_CTX *ctx;
@@ -307,6 +285,7 @@ char *ptr;
307 ctx->ibuf_len=0; 285 ctx->ibuf_len=0;
308 ctx->obuf_off=0; 286 ctx->obuf_off=0;
309 ctx->obuf_len=0; 287 ctx->obuf_len=0;
288 if (b->next_bio == NULL) return(0);
310 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 289 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
311 break; 290 break;
312 case BIO_CTRL_INFO: 291 case BIO_CTRL_INFO:
@@ -323,19 +302,25 @@ char *ptr;
323 case BIO_CTRL_WPENDING: 302 case BIO_CTRL_WPENDING:
324 ret=(long)ctx->obuf_len; 303 ret=(long)ctx->obuf_len;
325 if (ret == 0) 304 if (ret == 0)
305 {
306 if (b->next_bio == NULL) return(0);
326 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 307 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
308 }
327 break; 309 break;
328 case BIO_CTRL_PENDING: 310 case BIO_CTRL_PENDING:
329 ret=(long)ctx->ibuf_len; 311 ret=(long)ctx->ibuf_len;
330 if (ret == 0) 312 if (ret == 0)
313 {
314 if (b->next_bio == NULL) return(0);
331 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 315 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
316 }
332 break; 317 break;
333 case BIO_C_SET_BUFF_READ_DATA: 318 case BIO_C_SET_BUFF_READ_DATA:
334 if (num > ctx->ibuf_size) 319 if (num > ctx->ibuf_size)
335 { 320 {
336 p1=Malloc((int)num); 321 p1=OPENSSL_malloc((int)num);
337 if (p1 == NULL) goto malloc_error; 322 if (p1 == NULL) goto malloc_error;
338 if (ctx->ibuf != NULL) Free(ctx->ibuf); 323 if (ctx->ibuf != NULL) OPENSSL_free(ctx->ibuf);
339 ctx->ibuf=p1; 324 ctx->ibuf=p1;
340 } 325 }
341 ctx->ibuf_off=0; 326 ctx->ibuf_off=0;
@@ -367,21 +352,21 @@ char *ptr;
367 p2=ctx->obuf; 352 p2=ctx->obuf;
368 if ((ibs > DEFAULT_BUFFER_SIZE) && (ibs != ctx->ibuf_size)) 353 if ((ibs > DEFAULT_BUFFER_SIZE) && (ibs != ctx->ibuf_size))
369 { 354 {
370 p1=(char *)Malloc((int)num); 355 p1=(char *)OPENSSL_malloc((int)num);
371 if (p1 == NULL) goto malloc_error; 356 if (p1 == NULL) goto malloc_error;
372 } 357 }
373 if ((obs > DEFAULT_BUFFER_SIZE) && (obs != ctx->obuf_size)) 358 if ((obs > DEFAULT_BUFFER_SIZE) && (obs != ctx->obuf_size))
374 { 359 {
375 p2=(char *)Malloc((int)num); 360 p2=(char *)OPENSSL_malloc((int)num);
376 if (p2 == NULL) 361 if (p2 == NULL)
377 { 362 {
378 if (p1 != ctx->ibuf) Free(p1); 363 if (p1 != ctx->ibuf) OPENSSL_free(p1);
379 goto malloc_error; 364 goto malloc_error;
380 } 365 }
381 } 366 }
382 if (ctx->ibuf != p1) 367 if (ctx->ibuf != p1)
383 { 368 {
384 Free(ctx->ibuf); 369 OPENSSL_free(ctx->ibuf);
385 ctx->ibuf=p1; 370 ctx->ibuf=p1;
386 ctx->ibuf_off=0; 371 ctx->ibuf_off=0;
387 ctx->ibuf_len=0; 372 ctx->ibuf_len=0;
@@ -389,7 +374,7 @@ char *ptr;
389 } 374 }
390 if (ctx->obuf != p2) 375 if (ctx->obuf != p2)
391 { 376 {
392 Free(ctx->obuf); 377 OPENSSL_free(ctx->obuf);
393 ctx->obuf=p2; 378 ctx->obuf=p2;
394 ctx->obuf_off=0; 379 ctx->obuf_off=0;
395 ctx->obuf_len=0; 380 ctx->obuf_len=0;
@@ -397,12 +382,14 @@ char *ptr;
397 } 382 }
398 break; 383 break;
399 case BIO_C_DO_STATE_MACHINE: 384 case BIO_C_DO_STATE_MACHINE:
385 if (b->next_bio == NULL) return(0);
400 BIO_clear_retry_flags(b); 386 BIO_clear_retry_flags(b);
401 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 387 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
402 BIO_copy_next_retry(b); 388 BIO_copy_next_retry(b);
403 break; 389 break;
404 390
405 case BIO_CTRL_FLUSH: 391 case BIO_CTRL_FLUSH:
392 if (b->next_bio == NULL) return(0);
406 if (ctx->obuf_len <= 0) 393 if (ctx->obuf_len <= 0)
407 { 394 {
408 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 395 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
@@ -432,6 +419,7 @@ fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len-ctx->obuf_
432 break; 419 break;
433 } 420 }
434 } 421 }
422 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
435 break; 423 break;
436 case BIO_CTRL_DUP: 424 case BIO_CTRL_DUP:
437 dbio=(BIO *)ptr; 425 dbio=(BIO *)ptr;
@@ -440,6 +428,7 @@ fprintf(stderr,"FLUSH [%3d] %3d -> %3d\n",ctx->obuf_off,ctx->obuf_len-ctx->obuf_
440 ret=0; 428 ret=0;
441 break; 429 break;
442 default: 430 default:
431 if (b->next_bio == NULL) return(0);
443 ret=BIO_ctrl(b->next_bio,cmd,num,ptr); 432 ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
444 break; 433 break;
445 } 434 }
@@ -449,10 +438,21 @@ malloc_error:
449 return(0); 438 return(0);
450 } 439 }
451 440
452static int buffer_gets(b,buf,size) 441static long buffer_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
453BIO *b; 442 {
454char *buf; 443 long ret=1;
455int size; 444
445 if (b->next_bio == NULL) return(0);
446 switch (cmd)
447 {
448 default:
449 ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
450 break;
451 }
452 return(ret);
453 }
454
455static int buffer_gets(BIO *b, char *buf, int size)
456 { 456 {
457 BIO_F_BUFFER_CTX *ctx; 457 BIO_F_BUFFER_CTX *ctx;
458 int num=0,i,flag; 458 int num=0,i,flag;
@@ -503,10 +503,8 @@ int size;
503 } 503 }
504 } 504 }
505 505
506static int buffer_puts(b,str) 506static int buffer_puts(BIO *b, const char *str)
507BIO *b;
508char *str;
509 { 507 {
510 return(BIO_write(b,str,strlen(str))); 508 return(buffer_write(b,str,strlen(str)));
511 } 509 }
512 510