@@ -71,6 +71,19 @@ void get_client_origin(char *out, size_t outlen, struct sqlclntstate *clnt) {
7171 clnt -> conninfo .pid );
7272}
7373
74+ static void report_access_denied (const char * action , const char * table , const char * user , int bdberr , errstat_t * err ) {
75+ char msg [1024 ];
76+ if (bdberr )
77+ snprintf (msg , sizeof (msg ), "%s access denied to table %s for user %s bdberr=%d" , action , table , user , bdberr );
78+ else
79+ snprintf (msg , sizeof (msg ), "%s access denied to table %s for user %s" , action , table , user );
80+ logmsg (LOGMSG_INFO , "%s\n" , msg );
81+ if (err ) {
82+ errstat_set_rc (err , SQLITE_ACCESS );
83+ errstat_set_str (err , msg );
84+ }
85+ }
86+
7487int gbl_fdb_auth_error = 0 ;
7588
7689/* If user password does not match this function
@@ -261,11 +274,7 @@ int access_control_check_sql_write(struct BtCursor *pCur,
261274 if ((authdata = get_authdata (clnt )) != NULL )
262275 clnt -> authdata = authdata ;
263276 char client_info [1024 ];
264- snprintf (client_info , sizeof (client_info ),
265- "%s:origin:%s:pid:%d" ,
266- clnt -> argv0 ? clnt -> argv0 : "?" ,
267- clnt -> origin ? clnt -> origin : "?" ,
268- clnt -> conninfo .pid );
277+ get_client_origin (client_info , sizeof (client_info ), clnt );
269278 if (!clnt -> authdata && clnt -> secure && !gbl_allow_anon_id_for_spmux ) {
270279 return reject_anon_id (clnt );
271280 }
@@ -274,12 +283,7 @@ int access_control_check_sql_write(struct BtCursor *pCur,
274283 clnt -> argv0 ? clnt -> argv0 : "???" , clnt -> conninfo .pid , clnt -> conninfo .node );
275284 } else if (externalComdb2AuthenticateUserWrite (clnt -> authdata , table_name , client_info )) {
276285 ATOMIC_ADD64 (gbl_num_auth_denied , 1 );
277- char msg [1024 ];
278- snprintf (msg , sizeof (msg ), "Write access denied to table %s for user %s" ,
279- table_name , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" );
280- logmsg (LOGMSG_INFO , "%s\n" , msg );
281- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
282- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
286+ report_access_denied ("Write" , table_name , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" , 0 , & thd -> clnt -> osql .xerr );
283287 return SQLITE_ABORT ;
284288 }
285289 }
@@ -291,14 +295,7 @@ int access_control_check_sql_write(struct BtCursor *pCur,
291295 pCur -> db -> tablename , ACCESS_WRITE , & bdberr );
292296 if (rc != 0 ) {
293297 ATOMIC_ADD64 (gbl_num_auth_denied , 1 );
294- char msg [1024 ];
295- snprintf (msg , sizeof (msg ),
296- "Write access denied to %s for user %s bdberr=%d" ,
297- table_name , thd -> clnt -> current_user .name , bdberr );
298- logmsg (LOGMSG_INFO , "%s\n" , msg );
299- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
300- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
301-
298+ report_access_denied ("Write" , table_name , thd -> clnt -> current_user .name , bdberr , & thd -> clnt -> osql .xerr );
302299 return SQLITE_ABORT ;
303300 }
304301 }
@@ -344,24 +341,15 @@ int access_control_check_sql_read(struct BtCursor *pCur, struct sql_thread *thd,
344341 if ((authdata = get_authdata (clnt )) != NULL )
345342 clnt -> authdata = authdata ;
346343 char client_info [1024 ];
347- snprintf (client_info , sizeof (client_info ),
348- "%s:origin:%s:pid:%d" ,
349- clnt -> argv0 ? clnt -> argv0 : "?" ,
350- clnt -> origin ? clnt -> origin : "?" ,
351- clnt -> conninfo .pid );
344+ get_client_origin (client_info , sizeof (client_info ), clnt );
352345 if (!clnt -> authdata && clnt -> secure && !gbl_allow_anon_id_for_spmux )
353346 return reject_anon_id (clnt );
354347 if (gbl_externalauth_warn && !clnt -> authdata ) {
355348 logmsg (LOGMSG_INFO , "Client %s pid:%d mach:%d is missing authentication data\n" ,
356349 clnt -> argv0 ? clnt -> argv0 : "???" , clnt -> conninfo .pid , clnt -> conninfo .node );
357350 } else if (externalComdb2AuthenticateUserRead (clnt -> authdata , table_name , client_info )) {
358351 ATOMIC_ADD64 (gbl_num_auth_denied , 1 );
359- char msg [1024 ];
360- snprintf (msg , sizeof (msg ), "Read access denied to table %s for user %s" ,
361- table_name , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" );
362- logmsg (LOGMSG_INFO , "%s\n" , msg );
363- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
364- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
352+ report_access_denied ("Read" , table_name , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" , 0 , & thd -> clnt -> osql .xerr );
365353 return SQLITE_ABORT ;
366354 }
367355 }
@@ -371,14 +359,7 @@ int access_control_check_sql_read(struct BtCursor *pCur, struct sql_thread *thd,
371359 pCur -> db -> tablename , ACCESS_READ , & bdberr );
372360 if (rc != 0 ) {
373361 ATOMIC_ADD64 (gbl_num_auth_denied , 1 );
374- char msg [1024 ];
375- snprintf (msg , sizeof (msg ),
376- "Read access denied to %s for user %s bdberr=%d" ,
377- table_name , thd -> clnt -> current_user .name , bdberr );
378- logmsg (LOGMSG_INFO , "%s\n" , msg );
379- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
380- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
381-
362+ report_access_denied ("Read" , table_name , thd -> clnt -> current_user .name , bdberr , & thd -> clnt -> osql .xerr );
382363 return SQLITE_ABORT ;
383364 }
384365 }
@@ -467,24 +448,15 @@ int comdb2_check_vtab_access(sqlite3 *db, sqlite3_module *module)
467448 && !clnt -> current_user .bypass_auth /* not analyze */ ) {
468449 clnt -> authdata = get_authdata (clnt );
469450 char client_info [1024 ];
470- snprintf (client_info , sizeof (client_info ),
471- "%s:origin:%s:pid:%d" ,
472- clnt -> argv0 ? clnt -> argv0 : "?" ,
473- clnt -> origin ? clnt -> origin : "?" ,
474- clnt -> conninfo .pid );
451+ get_client_origin (client_info , sizeof (client_info ), clnt );
475452 if (!clnt -> authdata && clnt -> secure && !gbl_allow_anon_id_for_spmux )
476453 return reject_anon_id (clnt );
477454 if (gbl_externalauth_warn && !clnt -> authdata ) {
478455 logmsg (LOGMSG_INFO , "Client %s pid:%d mach:%d is missing authentication data\n" ,
479456 clnt -> argv0 ? clnt -> argv0 : "???" , clnt -> conninfo .pid , clnt -> conninfo .node );
480457 } else if (externalComdb2AuthenticateUserRead (clnt -> authdata , mod -> zName , client_info )) {
481458 ATOMIC_ADD64 (gbl_num_auth_denied , 1 );
482- char msg [1024 ];
483- snprintf (msg , sizeof (msg ), "Read access denied to table %s for user %s" ,
484- mod -> zName , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" );
485- logmsg (LOGMSG_INFO , "%s\n" , msg );
486- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
487- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
459+ report_access_denied ("Read" , mod -> zName , clnt -> externalAuthUser ? clnt -> externalAuthUser : "" , 0 , & thd -> clnt -> osql .xerr );
488460 return SQLITE_ABORT ;
489461 }
490462 return SQLITE_OK ;
@@ -493,13 +465,7 @@ int comdb2_check_vtab_access(sqlite3 *db, sqlite3_module *module)
493465 thedb -> bdb_env , thd -> clnt -> current_user .name ,
494466 (char * )mod -> zName , ACCESS_READ , & bdberr );
495467 if (rc != 0 ) {
496- char msg [1024 ];
497- snprintf (msg , sizeof (msg ),
498- "Read access denied to %s for user %s bdberr=%d" ,
499- mod -> zName , thd -> clnt -> current_user .name , bdberr );
500- logmsg (LOGMSG_INFO , "%s\n" , msg );
501- errstat_set_rc (& thd -> clnt -> osql .xerr , SQLITE_ACCESS );
502- errstat_set_str (& thd -> clnt -> osql .xerr , msg );
468+ report_access_denied ("Read" , mod -> zName , thd -> clnt -> current_user .name , bdberr , & thd -> clnt -> osql .xerr );
503469 return SQLITE_AUTH ;
504470 }
505471 return SQLITE_OK ;
0 commit comments