From 8630bef8646e5ae857f0ed0270be800dbec62b0a Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Mon, 18 Nov 2002 17:54:02 +0000 Subject: [PATCH] String length protection, VolUseDuration,MaxVolJobs see kes18Nov02 git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@200 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/scripts/Makefile.in | 5 ++--- bacula/src/cats/protos.h | 4 ++-- bacula/src/cats/sql_create.c | 5 +++-- bacula/src/cats/sql_find.c | 21 +++++++++++++-------- bacula/src/cats/sql_get.c | 34 +++++++++++++++------------------- bacula/src/dird/backup.c | 4 ++-- bacula/src/dird/catreq.c | 14 ++++++++------ bacula/src/dird/dird.c | 1 + bacula/src/dird/getmsg.c | 6 +++++- bacula/src/dird/protos.h | 7 +++---- bacula/src/jcr.h | 8 +++++++- bacula/src/lib/jcr.c | 26 ++++++++++++++++++-------- bacula/src/lib/protos.h | 4 ++-- 13 files changed, 81 insertions(+), 58 deletions(-) diff --git a/bacula/scripts/Makefile.in b/bacula/scripts/Makefile.in index 99d3ef8628..4aee059888 100755 --- a/bacula/scripts/Makefile.in +++ b/bacula/scripts/Makefile.in @@ -62,11 +62,10 @@ Makefiles: clean: @$(RMF) *~ 1 2 3 - @$(RMF) startmysql stopmysql bacula fd startit stopit btraceback - @$(RMF) console gconsole - # clean for distribution distclean: clean + @$(RMF) startmysql stopmysql bacula fd startit stopit btraceback + @$(RMF) console gconsole # ------------------------------------------------------------------------ diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index ab1fb39c18..e841c229ac 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -58,7 +58,7 @@ int db_delete_pool_record(B_DB *db, POOL_DBR *pool_dbr); int db_delete_media_record(B_DB *mdb, MEDIA_DBR *mr); /* find.c */ -int db_find_job_start_time(B_DB *mdb, JOB_DBR *jr, char *stime); +int db_find_job_start_time(B_DB *mdb, JOB_DBR *jr, POOLMEM **stime); int db_find_last_jobid(B_DB *mdb, JOB_DBR *jr); int db_find_next_volume(B_DB *mdb, int index, MEDIA_DBR *mr); @@ -90,7 +90,7 @@ int db_update_job_start_record(B_DB *db, JOB_DBR *jr); int db_update_job_end_record(B_DB *db, JOB_DBR *jr); int db_update_pool_record(B_DB *db, POOL_DBR *pr); int db_update_media_record(B_DB *db, MEDIA_DBR *mr); -int db_add_MD5_to_file_record(B_DB *mdb, FileId_t FileId, char *MD5); +int db_add_MD5_to_file_record(B_DB *mdb, FileId_t FileId, char *MD5); int db_mark_file_record(B_DB *mdb, FileId_t FileId, JobId_t JobId); #endif /* __SQL_PROTOS_H */ diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index f79e7158af..82239182a4 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -164,9 +164,10 @@ db_create_pool_record(B_DB *mdb, POOL_DBR *pr) int stat; char ed1[30], ed2[30]; + Dmsg0(200, "In create pool\n"); db_lock(mdb); Mmsg(&mdb->cmd, "SELECT PoolId,Name FROM Pool WHERE Name='%s'", pr->Name); - Dmsg1(20, "selectpool: %s\n", mdb->cmd); + Dmsg1(200, "selectpool: %s\n", mdb->cmd); if (QUERY_DB(mdb, mdb->cmd)) { @@ -196,7 +197,7 @@ VALUES ('%s',%u,%u,%d,%d,%d,%d,%d,%s,%s,%u,'%s','%s')", edit_uint64(pr->VolUseDuration, ed2), pr->MaxVolJobs, pr->PoolType, pr->LabelFormat); - Dmsg1(500, "Create Pool: %s\n", mdb->cmd); + Dmsg1(200, "Create Pool: %s\n", mdb->cmd); if (!INSERT_DB(mdb, mdb->cmd)) { Mmsg2(&mdb->errmsg, _("Create db Pool record %s failed: ERR=%s\n"), mdb->cmd, sql_strerror(mdb)); diff --git a/bacula/src/cats/sql_find.c b/bacula/src/cats/sql_find.c index e62d6d909d..0512f8d5c3 100644 --- a/bacula/src/cats/sql_find.c +++ b/bacula/src/cats/sql_find.c @@ -61,12 +61,12 @@ extern int QueryDB(char *file, int line, B_DB *db, char *select_cmd); * 1 on success, jr is unchanged, but stime is set */ int -db_find_job_start_time(B_DB *mdb, JOB_DBR *jr, char *stime) +db_find_job_start_time(B_DB *mdb, JOB_DBR *jr, POOLMEM **stime) { SQL_ROW row; int JobId; - strcpy(stime, "0000-00-00 00:00:00"); /* default */ + pm_strcpy(stime, "0000-00-00 00:00:00"); /* default */ db_lock(mdb); /* If no Id given, we must find corresponding job */ if (jr->JobId == 0) { @@ -117,14 +117,14 @@ ORDER by StartTime DESC LIMIT 1", } if ((row = sql_fetch_row(mdb)) == NULL) { - *stime = 0; /* set EOS */ + pm_strcpy(stime, ""); /* set EOS */ Mmsg2(&mdb->errmsg, _("No Job found for JobId=%d: %s\n"), JobId, sql_strerror(mdb)); sql_free_result(mdb); db_unlock(mdb); return 0; } Dmsg1(100, "Got start time: %s\n", row[0]); - strcpy(stime, row[0]); + pm_strcpy(stime, row[0]); sql_free_result(mdb); @@ -204,7 +204,8 @@ db_find_next_volume(B_DB *mdb, int item, MEDIA_DBR *mr) db_lock(mdb); Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,\ -VolBytes,VolMounts,VolErrors,VolWrites,VolMaxBytes,VolCapacityBytes,Slot,\ +VolBytes,VolMounts,VolErrors,VolWrites,VolMaxBytes,VolCapacityBytes,\ +VolRetention,VolUseDuration,MaxVolJobs,Recycle,Slot,\ FirstWritten FROM Media WHERE PoolId=%d AND MediaType='%s' AND VolStatus='%s' \ ORDER BY MediaId", mr->PoolId, mr->MediaType, mr->VolStatus); @@ -235,7 +236,7 @@ ORDER BY MediaId", mr->PoolId, mr->MediaType, mr->VolStatus); /* Return fields in Media Record */ mr->MediaId = atoi(row[0]); - strcpy(mr->VolumeName, row[1]); + bstrncpy(mr->VolumeName, row[1], sizeof(mr->VolumeName)); mr->VolJobs = atoi(row[2]); mr->VolFiles = atoi(row[3]); mr->VolBlocks = atoi(row[4]); @@ -245,8 +246,12 @@ ORDER BY MediaId", mr->PoolId, mr->MediaType, mr->VolStatus); mr->VolWrites = atoi(row[8]); mr->VolMaxBytes = (uint64_t)strtod(row[9], NULL); mr->VolCapacityBytes = (uint64_t)strtod(row[10], NULL); - mr->Slot = atoi(row[11]); - strcpy(mr->cFirstWritten, row[12]); + mr->VolRetention = (utime_t)strtod(row[11], NULL); + mr->VolUseDuration = (utime_t)strtod(row[12], NULL); + mr->MaxVolJobs = atoi(row[13]); + mr->Recycle = atoi(row[14]); + mr->Slot = atoi(row[15]); + bstrncpy(mr->cFirstWritten, row[16]!=NULL?row[16]:"", sizeof(mr->cFirstWritten)); sql_free_result(mdb); diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index 3f7bd2e9dd..787c3503d5 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -345,12 +345,12 @@ FROM Job WHERE JobId=%u", jr->JobId); jr->VolSessionId = atol(row[0]); jr->VolSessionTime = atol(row[1]); jr->PoolId = atoi(row[2]); - strcpy(jr->cStartTime, row[3]); - strcpy(jr->cEndTime, row[4]); + bstrncpy(jr->cStartTime, row[3]!=NULL?row[3]:"", sizeof(jr->cStartTime)); + bstrncpy(jr->cEndTime, row[4]!=NULL?row[4]:"", sizeof(jr->cEndTime)); jr->JobFiles = atol(row[5]); jr->JobBytes = (uint64_t)strtod(row[6], NULL); jr->JobTDate = (utime_t)strtod(row[7], NULL); - strcpy(jr->Job, row[8]); + bstrncpy(jr->Job, row[8]!=NULL?row[8]:"", sizeof(jr->Job)); jr->JobStatus = (int)*row[9]; jr->Type = (int)*row[10]; jr->Level = (int)*row[11]; @@ -481,9 +481,9 @@ int db_get_pool_record(B_DB *mdb, POOL_DBR *pdbr) db_lock(mdb); if (pdbr->PoolId != 0) { /* find by id */ Mmsg(&mdb->cmd, -"SELECT PoolId, Name, NumVols, MaxVols, UseOnce, UseCatalog, AcceptAnyVolume, \ -AutoPrune, Recycle, VolRetention, \ -PoolType, LabelFormat FROM Pool WHERE Pool.PoolId=%d", pdbr->PoolId); +"SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume,\ +AutoPrune,Recycle,VolRetention,VolUseDuration,MaxVolJobs,\ +PoolType,LabelFormat FROM Pool WHERE Pool.PoolId=%d", pdbr->PoolId); } else { /* find by name */ Mmsg(&mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume,\ @@ -504,7 +504,7 @@ PoolType,LabelFormat FROM Pool WHERE Pool.Name='%s'", pdbr->Name); Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg); } else { pdbr->PoolId = atoi(row[0]); - strcpy(pdbr->Name, row[1]); + bstrncpy(pdbr->Name, row[1]!=NULL?row[1]:"", sizeof(pdbr->Name)); pdbr->NumVols = atoi(row[2]); pdbr->MaxVols = atoi(row[3]); pdbr->UseOnce = atoi(row[4]); @@ -515,12 +515,8 @@ PoolType,LabelFormat FROM Pool WHERE Pool.Name='%s'", pdbr->Name); pdbr->VolRetention = (utime_t)strtod(row[9], NULL); pdbr->VolUseDuration = (utime_t)strtod(row[10], NULL); pdbr->MaxVolJobs = atoi(row[11]); - strcpy(pdbr->PoolType, row[12]); - if (row[13]) { - strcpy(pdbr->LabelFormat, row[13]); - } else { - pdbr->LabelFormat[0] = 0; - } + bstrncpy(pdbr->PoolType, row[12]!=NULL?row[12]:"", sizeof(pdbr->PoolType)); + bstrncpy(pdbr->LabelFormat, row[13]!=NULL?row[13]:"", sizeof(pdbr->LabelFormat)); stat = pdbr->PoolId; } } @@ -565,8 +561,8 @@ int db_get_fileset_record(B_DB *mdb, FILESET_DBR *fsr) Mmsg1(&mdb->errmsg, _("Error: FileSet record \"%s\" not found\n"), fsr->FileSet); } else { fsr->FileSetId = atoi(row[0]); - strcpy(fsr->FileSet, row[1]); - strcpy(fsr->MD5, row[2]); + bstrncpy(fsr->FileSet, row[1]!=NULL?row[1]:"", sizeof(fsr->FileSet)); + bstrncpy(fsr->MD5, row[2]!=NULL?row[2]:"", sizeof(fsr->MD5)); stat = fsr->FileSetId; } sql_free_result(mdb); @@ -677,7 +673,7 @@ FROM Media WHERE VolumeName='%s'", mr->VolumeName); } else { /* return values */ mr->MediaId = atoi(row[0]); - strcpy(mr->VolumeName, row[1]); + bstrncpy(mr->VolumeName, row[1]!=NULL?row[1]:"", sizeof(mr->VolumeName)); mr->VolJobs = atoi(row[2]); mr->VolFiles = atoi(row[3]); mr->VolBlocks = atoi(row[4]); @@ -687,15 +683,15 @@ FROM Media WHERE VolumeName='%s'", mr->VolumeName); mr->VolWrites = atoi(row[8]); mr->VolMaxBytes = (uint64_t)strtod(row[9], NULL); mr->VolCapacityBytes = (uint64_t)strtod(row[10], NULL); - strcpy(mr->MediaType, row[11]); - strcpy(mr->VolStatus, row[12]); + bstrncpy(mr->MediaType, row[11]!=NULL?row[11]:"", sizeof(mr->MediaType)); + bstrncpy(mr->VolStatus, row[12]!=NULL?row[12]:"", sizeof(mr->VolStatus)); mr->PoolId = atoi(row[13]); mr->VolRetention = (utime_t)strtod(row[14], NULL); mr->VolUseDuration = (utime_t)strtod(row[15], NULL); mr->MaxVolJobs = atoi(row[16]); mr->Recycle = atoi(row[17]); mr->Slot = atoi(row[18]); - strcpy(mr->cFirstWritten, row[19]); + bstrncpy(mr->cFirstWritten, row[19]!=NULL?row[19]:"", sizeof(mr->cFirstWritten)); stat = mr->MediaId; } } else { diff --git a/bacula/src/dird/backup.c b/bacula/src/dird/backup.c index ae5ab403f8..193cdbbfa5 100644 --- a/bacula/src/dird/backup.c +++ b/bacula/src/dird/backup.c @@ -117,12 +117,12 @@ int do_backup(JCR *jcr) case L_INCREMENTAL: /* Look up start time of last job */ jcr->jr.JobId = 0; - if (!db_find_job_start_time(jcr->db, &jcr->jr, jcr->stime)) { + if (!db_find_job_start_time(jcr->db, &jcr->jr, &jcr->stime)) { Jmsg(jcr, M_INFO, 0, _("Last FULL backup time not found. Doing FULL backup.\n")); jcr->JobLevel = jcr->jr.Level = L_FULL; } else { strcpy(since, ", since="); - strcat(since, jcr->stime); + bstrncat(since, jcr->stime, sizeof(since)); } Dmsg1(115, "Last start time = %s\n", jcr->stime); break; diff --git a/bacula/src/dird/catreq.c b/bacula/src/dird/catreq.c index f2b4ca28de..467eea555f 100644 --- a/bacula/src/dird/catreq.c +++ b/bacula/src/dird/catreq.c @@ -70,7 +70,7 @@ void catalog_request(JCR *jcr, BSOCK *bs, char *msg) JOBMEDIA_DBR jm; char Job[MAX_NAME_LENGTH]; int index, ok, relabel, writing, retry = 0; - char *omsg; + POOLMEM *omsg; memset(&mr, 0, sizeof(mr)); memset(&jm, 0, sizeof(jm)); @@ -82,14 +82,15 @@ void catalog_request(JCR *jcr, BSOCK *bs, char *msg) if (sscanf(bs->msg, Find_media, &Job, &index) == 2) { mr.PoolId = jcr->PoolId; strcpy(mr.MediaType, jcr->store->media_type); - Dmsg3(120, "CatReq FindMedia: Id=%d, MediaType=%s, Status=%s\n", - mr.PoolId, mr.MediaType, mr.VolStatus); + Dmsg2(120, "CatReq FindMedia: Id=%d, MediaType=%s\n", + mr.PoolId, mr.MediaType); /* * Find the Next Volume for Append */ next_volume: strcpy(mr.VolStatus, "Append"); /* want only appendable volumes */ ok = db_find_next_volume(jcr->db, index, &mr); + Dmsg1(200, "catreq after find_next_vol ok=%d\n", ok); if (!ok) { /* Well, try finding recycled tapes */ ok = find_recycled_volume(jcr, &mr); @@ -133,7 +134,7 @@ next_volume: */ if (ok) { jcr->MediaId = mr.MediaId; - strcpy(jcr->VolumeName, mr.VolumeName); + pm_strcpy(&jcr->VolumeName, mr.VolumeName); bash_spaces(mr.VolumeName); bnet_fsend(bs, OK_media, mr.VolumeName, mr.VolJobs, mr.VolFiles, mr.VolBlocks, mr.VolBytes, mr.VolMounts, mr.VolErrors, @@ -280,12 +281,13 @@ MediaType=%s\n", mr.PoolId, jcr->PoolId, mr.VolStatus, mr.Slot, mr.MediaType); } } else { - omsg = (char *) get_memory(bs->msglen+1); - strcpy(omsg, bs->msg); + omsg = get_memory(bs->msglen+1); + pm_strcpy(&omsg, bs->msg); bnet_fsend(bs, "1990 Invalid Catalog Request: %s", omsg); free_memory(omsg); } Dmsg1(120, ">CatReq response: %s", bs->msg); + Dmsg1(200, "Leave catreq jcr 0x%x\n", jcr); return; } diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index 7401a340c6..20824a2a63 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -364,6 +364,7 @@ Without that I don't know who I am :-(\n"), configfile); } db_close_database(db); } + } else { if (job->client) { Jmsg(NULL, M_FATAL, 0, _("No Catalog resource defined for client %s\n"), diff --git a/bacula/src/dird/getmsg.c b/bacula/src/dird/getmsg.c index e6ec9b4153..68b6a4a3df 100644 --- a/bacula/src/dird/getmsg.c +++ b/bacula/src/dird/getmsg.c @@ -128,6 +128,7 @@ int32_t bget_msg(BSOCK *bs, int rtn) Emsg1(M_ERROR, 0, _("Job not found: %s\n"), bs->msg); continue; } + Dmsg1(200, "Getmsg got jcr 0x%x\n", jcr); /* Skip past "Jmsg Job=nnn" */ if (!(msg=find_msg_start(bs->msg))) { @@ -165,13 +166,16 @@ int32_t bget_msg(BSOCK *bs, int rtn) * CatReq Job=nn Catalog-Request-Message */ if (bs->msg[0] == 'C') { /* Catalog request */ - Dmsg1(120, "Catalog req: %s", bs->msg); + Dmsg2(120, "Catalog req jcr 0x%x: %s", jcr, bs->msg); catalog_request(jcr, bs, msg); + Dmsg1(200, "Calling freejcr 0x%x\n", jcr); free_jcr(jcr); continue; } if (bs->msg[0] == 'U') { /* Catalog update */ + Dmsg2(120, "Catalog upd jcr 0x%x: %s", jcr, bs->msg); catalog_update(jcr, bs, msg); + Dmsg1(200, "Calling freejcr 0x%x\n", jcr); free_jcr(jcr); continue; } diff --git a/bacula/src/dird/protos.h b/bacula/src/dird/protos.h index b620ad088b..3621473616 100644 --- a/bacula/src/dird/protos.h +++ b/bacula/src/dird/protos.h @@ -46,16 +46,15 @@ extern char *level_to_str(int level); /* fd_cmds.c */ extern int connect_to_file_daemon(JCR *jcr, int retry_interval, - int max_retry_time, int verbose); + int max_retry_time, int verbose); extern int send_include_list(JCR *jcr); extern int send_exclude_list(JCR *jcr); extern int get_attributes_and_put_in_catalog(JCR *jcr); extern int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId); extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, - char *link, char *attr, int stream); + char *link, char *attr, int stream); /* job.c */ -extern void free_jcr(JCR *jcr); extern void set_jcr_defaults(JCR *jcr, JOB *job); extern void create_unique_job_name(JCR *jcr, char *base_name); extern void update_job_end_record(JCR *jcr); @@ -66,7 +65,7 @@ extern void mount_request(JCR *jcr, BSOCK *bs, char *buf); /* msgchan.c */ extern int connect_to_storage_daemon(JCR *jcr, int retry_interval, - int max_retry_time, int verbose); + int max_retry_time, int verbose); extern int start_storage_daemon_job(JCR *jcr); extern int start_storage_daemon_message_thread(JCR *jcr); extern int32_t bget_msg(BSOCK *bs, int type); diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 368b39319a..01fb04b712 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -242,7 +242,6 @@ typedef struct s_jcr JCR; /* The following routines are found in lib/jcr.c */ extern JCR *new_jcr(int size, JCR_free_HANDLER *daemon_free_jcr); -extern void free_jcr(JCR *jcr); extern void free_locked_jcr(JCR *jcr); extern JCR *get_jcr_by_id(uint32_t JobId); extern JCR *get_jcr_by_session(uint32_t SessionId, uint32_t SessionTime); @@ -252,4 +251,11 @@ extern JCR *get_next_jcr(JCR *jcr); extern void lock_jcr_chain(); extern void unlock_jcr_chain(); +#ifdef DEBUG +extern void b_free_jcr(char *file, int line, JCR *jcr); +#define free_jcr(jcr) b_free_jcr(__FILE__, __LINE__, (jcr)) +#else +extern void free_jcr(JCR *jcr); +#endif + #endif /* __JCR_H_ */ diff --git a/bacula/src/lib/jcr.c b/bacula/src/lib/jcr.c index 92b529fbda..1ee2787d22 100755 --- a/bacula/src/lib/jcr.c +++ b/bacula/src/lib/jcr.c @@ -153,15 +153,25 @@ static void free_common_jcr(JCR *jcr) /* * Global routine to free a jcr */ +#ifdef DEBUG +void b_free_jcr(char *file, int line, JCR *jcr) +{ + Dmsg3(200, "Enter free_jcr 0x%x from %s:%d\n", jcr, file, line); + +#else + void free_jcr(JCR *jcr) { - Dmsg0(200, "Enter free_jcr\n"); + Dmsg1(200, "Enter free_jcr 0x%x\n", jcr); + +#endif + P(mutex); jcr->use_count--; /* decrement use count */ - Dmsg1(200, "Decrement jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Decrement jcr 0x%x use_count=%d\n", jcr, jcr->use_count); if (jcr->use_count > 0) { /* if in use */ V(mutex); - Dmsg1(200, "jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "jcr 0x%x use_count=%d\n", jcr, jcr->use_count); return; } remove_jcr(jcr); @@ -180,7 +190,7 @@ void free_jcr(JCR *jcr) void free_locked_jcr(JCR *jcr) { jcr->use_count--; /* decrement use count */ - Dmsg1(200, "Decrement jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Decrement jcr 0x%x use_count=%d\n", jcr, jcr->use_count); if (jcr->use_count > 0) { /* if in use */ return; } @@ -205,7 +215,7 @@ JCR *get_jcr_by_id(uint32_t JobId) for (jcr = jobs; jcr; jcr=jcr->next) { if (jcr->JobId == JobId) { jcr->use_count++; - Dmsg1(200, "Increment jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Increment jcr 0x%x use_count=%d\n", jcr, jcr->use_count); break; } } @@ -227,7 +237,7 @@ JCR *get_jcr_by_session(uint32_t SessionId, uint32_t SessionTime) if (jcr->VolSessionId == SessionId && jcr->VolSessionTime == SessionTime) { jcr->use_count++; - Dmsg1(200, "Increment jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Increment jcr 0x%x use_count=%d\n", jcr, jcr->use_count); break; } } @@ -253,7 +263,7 @@ JCR *get_jcr_by_partial_name(char *Job) for (jcr = jobs; jcr; jcr=jcr->next) { if (strncmp(Job, jcr->Job, len) == 0) { jcr->use_count++; - Dmsg1(200, "Increment jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Increment jcr 0x%x use_count=%d\n", jcr, jcr->use_count); break; } } @@ -276,7 +286,7 @@ JCR *get_jcr_by_full_name(char *Job) for (jcr = jobs; jcr; jcr=jcr->next) { if (strcmp(jcr->Job, Job) == 0) { jcr->use_count++; - Dmsg1(200, "Increment jcr use_count=%d\n", jcr->use_count); + Dmsg2(200, "Increment jcr 0x%x use_count=%d\n", jcr, jcr->use_count); break; } } diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index 5192a1941e..2d19d305fc 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -30,8 +30,8 @@ int from_base64 (intmax_t *value, char *where); int bin_to_base64 (char *buf, char *bin, int len); /* bmisc.c */ -char *bstrncpy (char *dest, char *src, int maxlen); -char *bstrncat (char *dest, char *src, int maxlen); +char *bstrncpy (char *dest, const char *src, int maxlen); +char *bstrncat (char *dest, const char *src, int maxlen); void *b_malloc (char *file, int line, size_t size); #ifndef DEBUG void *bmalloc (size_t size); -- 2.39.5