Browse code

update

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@1569 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2005/05/23 07:53:07
Showing 1 changed files
... ...
@@ -42,7 +42,7 @@
42 42
 
43 43
 #ifdef CL_THREAD_SAFE
44 44
 #  include <pthread.h>
45
-pthread_mutex_t cli_gentemp_mutex = PTHREAD_MUTEX_INITIALIZER;
45
+pthread_mutex_t cli_gentempname_mutex = PTHREAD_MUTEX_INITIALIZER;
46 46
 #endif
47 47
 
48 48
 #if defined(HAVE_READDIR_R_3) || defined(HAVE_READDIR_R_2)
... ...
@@ -78,7 +78,7 @@ pthread_mutex_t cli_gentemp_mutex = PTHREAD_MUTEX_INITIALIZER;
78 78
 
79 79
 short cli_debug_flag = 0, cli_leavetemps_flag = 0;
80 80
 
81
-static unsigned char oldmd5buff[16] = { 16, 38, 97, 12, 8, 4, 72, 196, 217, 144, 33, 124, 18, 11, 17, 253 };
81
+static unsigned char name_salt[16] = { 16, 38, 97, 12, 8, 4, 72, 196, 217, 144, 33, 124, 18, 11, 17, 253 };
82 82
 
83 83
 void cli_warnmsg(const char *str, ...)
84 84
 {
... ...
@@ -263,7 +263,7 @@ char *cli_md5file(const char *filename)
263 263
     return md5str;
264 264
 }
265 265
 
266
-static char *cli_md5buff(const char *buffer, unsigned int len)
266
+static char *cli_md5buff(const char *buffer, unsigned int len, unsigned char *dig)
267 267
 {
268 268
 	unsigned char digest[16];
269 269
 	char *md5str, *pt;
... ...
@@ -274,7 +274,9 @@ static char *cli_md5buff(const char *buffer, unsigned int len)
274 274
     MD5_Init(&ctx);
275 275
     MD5_Update(&ctx, (unsigned char *) buffer, len);
276 276
     MD5_Final(digest, &ctx);
277
-    memcpy(oldmd5buff, digest, 16);
277
+
278
+    if(dig)
279
+	memcpy(dig, digest, 16);
278 280
 
279 281
     if(!(md5str = (char *) cli_calloc(32 + 1, sizeof(char))))
280 282
 	return NULL;
... ...
@@ -378,7 +380,6 @@ static char *cli_gentempname(const char *dir)
378 378
 	int i;
379 379
 	struct stat foo;
380 380
 
381
-
382 381
     if(!dir) {
383 382
 	if((mdir = getenv("TMPDIR")) == NULL)
384 383
 #ifdef P_tmpdir
... ...
@@ -389,23 +390,36 @@ static char *cli_gentempname(const char *dir)
389 389
     } else
390 390
 	mdir = dir;
391 391
 
392
-    name = (char*) cli_calloc(strlen(mdir) + 1 + 16 + 1 + 7, sizeof(char));
393
-    if(name == NULL) {
392
+    name = (char *) cli_calloc(strlen(mdir) + 1 + 32 + 1 + 7, sizeof(char));
393
+    if(!name) {
394 394
 	cli_dbgmsg("cli_gentempname('%s'): out of memory\n", mdir);
395 395
 	return NULL;
396 396
     }
397 397
 
398
-    memcpy(salt, oldmd5buff, 16);
398
+#ifdef CL_THREAD_SAFE
399
+    pthread_mutex_lock(&cli_gentempname_mutex);
400
+#endif
401
+
402
+    memcpy(salt, name_salt, 16);
399 403
 
400
-    do {	
401
-	for(i = 16; i < 48; i++)
402
-	    salt[i] = cli_rndnum(256);
404
+    for(i = 16; i < 48; i++)
405
+	salt[i] = cli_rndnum(256);
403 406
 
404
-	tmp = cli_md5buff(( char* ) salt, 48);
405
-	sprintf(name, "%s/clamav-", mdir);
406
-	strncat(name, tmp, 16);
407
-	free(tmp);
408
-    } while(stat(name, &foo) != -1);
407
+    tmp = cli_md5buff((char *) salt, 48, name_salt);
408
+
409
+#ifdef CL_THREAD_SAFE
410
+    pthread_mutex_unlock(&cli_gentempname_mutex);
411
+#endif
412
+
413
+    if(!tmp) {
414
+	free(name);
415
+	cli_dbgmsg("cli_gentempname('%s'): out of memory\n", mdir);
416
+	return NULL;
417
+    }
418
+
419
+    sprintf(name, "%s/clamav-", mdir);
420
+    strncat(name, tmp, 32);
421
+    free(tmp);
409 422
 
410 423
     return(name);
411 424
 }
... ...
@@ -414,16 +428,8 @@ char *cli_gentemp(const char *dir)
414 414
 {
415 415
 	char *name;
416 416
 
417
-#ifdef CL_THREAD_SAFE
418
-    pthread_mutex_lock(&cli_gentemp_mutex);
419
-#endif
420
-
421 417
     name = cli_gentempname(dir);
422 418
 
423
-#ifdef CL_THREAD_SAFE
424
-    pthread_mutex_unlock(&cli_gentemp_mutex);
425
-#endif
426
-
427 419
     return(name);
428 420
 }
429 421
 
... ...
@@ -432,16 +438,8 @@ char *cli_gentempdir(const char *dir)
432 432
 {
433 433
 	char *name;
434 434
 
435
-#ifdef CL_THREAD_SAFE
436
-    pthread_mutex_lock(&cli_gentemp_mutex);
437
-#endif
438
-
439 435
     name = cli_gentempname(dir);
440 436
 
441
-#ifdef CL_THREAD_SAFE
442
-    pthread_mutex_unlock(&cli_gentemp_mutex);
443
-#endif
444
-
445 437
     if(name && mkdir(name, 0700)) {
446 438
 	cli_dbgmsg("cli_gentempdir(): can't create temp directory: %s\n", name);
447 439
         free(name);
... ...
@@ -455,16 +453,8 @@ char *cli_gentempdesc(const char *dir, int *fd)
455 455
 {
456 456
 	char *name;
457 457
 
458
-#ifdef CL_THREAD_SAFE
459
-    pthread_mutex_lock(&cli_gentemp_mutex);
460
-#endif
461
-
462 458
     name = cli_gentempname(dir);
463 459
 
464
-#ifdef CL_THREAD_SAFE
465
-    pthread_mutex_unlock(&cli_gentemp_mutex);
466
-#endif
467
-
468 460
     if(name && ((*fd = open(name, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, S_IRWXU)) < 0)) {
469 461
 	cli_dbgmsg("cli_gentempdesc(): can't create temp file: %s\n", name);
470 462
         free(name);
... ...
@@ -478,16 +468,8 @@ char *cli_gentempstream(const char *dir, FILE **fs)
478 478
 {
479 479
 	char *name;
480 480
 
481
-#ifdef CL_THREAD_SAFE
482
-    pthread_mutex_lock(&cli_gentemp_mutex);
483
-#endif
484
-
485 481
     name = cli_gentempname(dir);
486 482
 
487
-#ifdef CL_THREAD_SAFE
488
-    pthread_mutex_unlock(&cli_gentemp_mutex);
489
-#endif
490
-
491 483
     if(name && ((*fs = fopen(name, "wb+")) == NULL)) {
492 484
 	cli_dbgmsg("cli_gentempstream(): can't create temp file: %s\n", name);
493 485
         free(name);