支持https;适应版本跳跃;增加md5校验;
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/md5.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <MESA/MESA_handle_logger.h>
|
||||
@@ -16,6 +17,26 @@
|
||||
#define MESA_RUNTIME_LOGV4(handle, lv, fmt, args...) \
|
||||
MESA_handle_runtime_log((handle), (lv), "DorisServer", "%s:%d, " fmt, __FILENAME__, __LINE__, ##args)
|
||||
|
||||
static int scandir_md5_final_string(MD5_CTX *c, char *result, unsigned int size)
|
||||
{
|
||||
unsigned char md5[17]={0};
|
||||
int i;
|
||||
|
||||
if(MD5_Final(md5, c) != 1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if(size < 33)
|
||||
return -1;
|
||||
|
||||
for(i=0; i<16; i++)
|
||||
{
|
||||
sprintf(result + i*2, "%02x", md5[i]);
|
||||
}
|
||||
result[32] = '\0';
|
||||
return 0;
|
||||
}
|
||||
|
||||
//replacement of glibc scandir, to adapt dictator malloc wrap
|
||||
#define ENLARGE_STEP 1024
|
||||
int my_scandir(const char *dir, struct dirent ***namelist,
|
||||
@@ -209,12 +230,15 @@ bool doris_read_table_file(struct doris_idxfile_scanner *scanner, struct cfg_tab
|
||||
{
|
||||
FILE *fp;
|
||||
size_t readlen, remainlen, oncesize;
|
||||
MD5_CTX md5ctx;
|
||||
char md5buffer[64];
|
||||
|
||||
if((fp = fopen(table->cfg_path, "r")) == NULL)
|
||||
{
|
||||
MESA_RUNTIME_LOGV4(logger,RLOG_LV_FATAL, "fopen table file %s failed: %s", table->cfg_path, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
MD5_Init(&md5ctx);
|
||||
|
||||
doris_cbs->cfgfile_start(NULL, table->table_name, table->filesize, table->cfg_num, doris_cbs->userdata);
|
||||
remainlen = table->filesize;
|
||||
@@ -225,8 +249,10 @@ bool doris_read_table_file(struct doris_idxfile_scanner *scanner, struct cfg_tab
|
||||
assert(readlen == oncesize);
|
||||
remainlen -= readlen;
|
||||
doris_cbs->cfgfile_update(NULL, scanner->oncebuf, readlen, doris_cbs->userdata);
|
||||
MD5_Update(&md5ctx, scanner->oncebuf, readlen);
|
||||
}
|
||||
doris_cbs->cfgfile_finish(NULL, doris_cbs->userdata);
|
||||
scandir_md5_final_string(&md5ctx, md5buffer, 64);
|
||||
doris_cbs->cfgfile_finish(NULL, md5buffer, doris_cbs->userdata);
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user