Skip to content

Commit dcf277e

Browse files
committed
fix traces with external databases
1 parent e4dd4b4 commit dcf277e

File tree

5 files changed

+476
-92
lines changed

5 files changed

+476
-92
lines changed

src/external.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const char EXTERNAL_DBS_PWD_INSERT[] =
8383

8484
const char EXTERNAL_DBS_ROLLUP_CREATE[] =
8585
"DROP TABLE IF EXISTS " EXTERNAL_DBS_ROLLUP ";"
86-
"CREATE TABLE " EXTERNAL_DBS_ROLLUP "(type TEXT, pinode TEXT, filename TEXT, mode INT64, uid INT64, gid INT64, PRIMARY KEY(type, filename));";
86+
"CREATE TABLE " EXTERNAL_DBS_ROLLUP "(type TEXT, pinode TEXT, filename TEXT, mode INT64, uid INT64, gid INT64, PRIMARY KEY(type, pinode, filename));";
8787

8888
const char EXTERNAL_DBS_ROLLUP_INSERT[] =
8989
"INSERT INTO " EXTERNAL_DBS_ROLLUP " VALUES (@type, pinode, @filename, @mode, @uid, @gid);";
@@ -152,11 +152,11 @@ static size_t external_create_query(char *sql, const size_t sql_size,
152152

153153
int external_insert(sqlite3 *db, const char *type, const long long int pinode, const char *filename) {
154154
char sql[MAXSQL];
155-
SNPRINTF(sql, sizeof(sql),
156-
"INSERT INTO " EXTERNAL_DBS_PWD " (type, pinode, filename) "
157-
"VALUES "
158-
"('%s', '%lld', '%s');",
159-
type, pinode, filename);
155+
sqlite3_snprintf(sizeof(sql), sql,
156+
"INSERT INTO " EXTERNAL_DBS_PWD " (type, pinode, filename) "
157+
"VALUES "
158+
"(%Q, '%lld', %Q);",
159+
type, pinode, filename);
160160

161161
char *err = NULL;
162162
if (sqlite3_exec(db, sql, NULL, NULL, &err) != SQLITE_OK) {
@@ -286,10 +286,10 @@ int external_concatenate(sqlite3 *db,
286286
/* find external databases of given type */
287287
char get_mappings[MAXSQL];
288288
const size_t get_mappings_len = external_create_query(get_mappings, sizeof(get_mappings),
289-
"filename", 8,
290-
EXTERNAL_DBS, EXTERNAL_DBS_LEN,
291-
type,
292-
extra);
289+
"filename", 8,
290+
EXTERNAL_DBS, EXTERNAL_DBS_LEN,
291+
type,
292+
extra);
293293

294294
/* step through each external file recorded in the main database */
295295
sqlite3_stmt *res = NULL;

src/gufi_dir2trace.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,16 @@ static int process_external(struct input *in, void *args,
110110
const long long int pinode,
111111
const char *filename) {
112112
(void) pinode;
113-
externaltofile((FILE *) args, in->delim, filename);
113+
114+
char fullpath[MAXPATH];
115+
if (!realpath(filename, fullpath)) {
116+
const int err = errno;
117+
fprintf(stderr, "Error: Could not resolve path of %s: %s (%d)",
118+
filename, strerror(err), err);
119+
return 1;
120+
}
121+
122+
externaltofile((FILE *) args, in->delim, fullpath);
114123
return 0;
115124
}
116125

src/gufi_trace2index.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ static int processdir(QPTPool_t *ctx, const size_t id, void *data, void *args) {
301301
if (row_ed.type == 'e') {
302302
/* insert right here (instead of bulk inserting) since this is likely to be very rare */
303303
timestamp_set_start(external_db);
304-
external_insert(db, dir.name, dir.pinode, row.name + row.name_len - row.basename_len);
304+
external_insert(db, EXTERNAL_TYPE_USER_DB_NAME, ed.statuso.st_ino, row.name);
305305
timestamp_set_end(external_db);
306306
}
307307
else {

0 commit comments

Comments
 (0)