forked from cory/tildefriends
		
	Trying to understand / work around sql logic errors.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4015 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										24
									
								
								src/ssb.db.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/ssb.db.c
									
									
									
									
									
								
							| @@ -163,6 +163,9 @@ void tf_ssb_db_init(tf_ssb_t* ssb) | ||||
| 	_tf_ssb_db_exec(db, "DROP TRIGGER IF EXISTS messages_ad_refs"); | ||||
| 	_tf_ssb_db_exec(db, "CREATE TRIGGER IF NOT EXISTS messages_ad_refs AFTER DELETE ON messages BEGIN DELETE FROM messages_refs WHERE messages_refs.message = old.id; END"); | ||||
|  | ||||
| 	_tf_ssb_db_exec(db, "CREATE INDEX IF NOT EXISTS messages_refs_message_idx ON messages_refs (message)"); | ||||
| 	_tf_ssb_db_exec(db, "CREATE INDEX IF NOT EXISTS messages_refs_ref_idx ON messages_refs (ref)"); | ||||
|  | ||||
| 	bool need_add_sequence_before_author = true; | ||||
| 	bool need_convert_timestamp_to_real = false; | ||||
|  | ||||
| @@ -612,29 +615,40 @@ static JSValue _tf_ssb_sqlite_row_to_json(JSContext* context, sqlite3_stmt* row) | ||||
|  | ||||
| static int _tf_ssb_sqlite_authorizer(void* user_data, int action_code, const char* arg0, const char* arg1, const char* arg2, const char* arg3) | ||||
| { | ||||
| 	int result = SQLITE_DENY; | ||||
| 	switch (action_code) | ||||
| 	{ | ||||
| 	case SQLITE_SELECT: | ||||
| 	case SQLITE_FUNCTION: | ||||
| 		return SQLITE_OK; | ||||
| 		result = SQLITE_OK; | ||||
| 		break; | ||||
| 	case SQLITE_READ: | ||||
| 		return ( | ||||
| 		result = ( | ||||
| 			strcmp(arg0, "blob_wants") == 0 || | ||||
| 			strcmp(arg0, "json_each") == 0 || | ||||
| 			strcmp(arg0, "messages") == 0 || | ||||
| 			strcmp(arg0, "messages_fts") == 0 || | ||||
| 			strcmp(arg0, "messages_fts_idx") == 0 || | ||||
| 			strcmp(arg0, "messages_refs") == 0 || | ||||
| 			strcmp(arg0, "messages_refs_message_idx") == 0 || | ||||
| 			strcmp(arg0, "messages_refs_ref_idx") == 0 || | ||||
| 			strcmp(arg0, "sqlite_master") == 0 || | ||||
| 			false) | ||||
| 			? SQLITE_OK : SQLITE_DENY; | ||||
| 		break; | ||||
| 	case SQLITE_PRAGMA: | ||||
| 		return strcmp(arg0, "data_version") == 0 ? SQLITE_OK : SQLITE_DENY; | ||||
| 		result = strcmp(arg0, "data_version") == 0 ? SQLITE_OK : SQLITE_DENY; | ||||
| 		break; | ||||
| 	case SQLITE_UPDATE: | ||||
| 		return strcmp(arg0, "sqlite_master") == 0 ? SQLITE_OK : SQLITE_DENY; | ||||
| 		result = strcmp(arg0, "sqlite_master") == 0 ? SQLITE_OK : SQLITE_DENY; | ||||
| 		break; | ||||
| 	} | ||||
| 	return SQLITE_DENY; | ||||
| 	if (result != SQLITE_OK) | ||||
| 	{ | ||||
| 		printf("Denying sqlite access to %d %s %s %s %s\n", action_code, arg0, arg1, arg2, arg3); | ||||
| 		fflush(stdout); | ||||
| 	} | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| JSValue tf_ssb_db_visit_query(tf_ssb_t* ssb, const char* query, const JSValue binds, void (*callback)(JSValue row, void* user_data), void* user_data) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user