priv.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <grass/dbmi.h>
  2. #include "globals.h"
  3. #include "proto.h"
  4. int
  5. db__driver_grant_on_table (dbString *tableName, int priv, int to)
  6. {
  7. PGresult *res;
  8. dbString sql;
  9. dbConnection connection;
  10. G_debug (3, "db__driver_grant_on_table()");
  11. db_get_connection(&connection);
  12. db_init_string (&sql);
  13. init_error();
  14. db_set_string ( &sql, "grant " );
  15. if ( priv | DB_PRIV_SELECT )
  16. db_append_string ( &sql, "select " );
  17. db_append_string ( &sql, "on " );
  18. db_append_string ( &sql, db_get_string(tableName) );
  19. db_append_string ( &sql, " to " );
  20. if ( to | DB_GROUP && connection.group ) {
  21. db_append_string ( &sql, "group " );
  22. db_append_string ( &sql, connection.group );
  23. if ( to | DB_PUBLIC )
  24. db_append_string ( &sql, ", " );
  25. }
  26. if ( to | DB_PUBLIC )
  27. db_append_string ( &sql, "public" );
  28. G_debug (3, " SQL: %s", db_get_string(&sql) );
  29. res = PQexec(pg_conn, db_get_string(&sql) );
  30. if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
  31. append_error( "Cannot grant on table:\n");
  32. append_error( db_get_string(&sql) );
  33. append_error( "\n" );
  34. append_error(PQerrorMessage(pg_conn));
  35. report_error();
  36. PQclear(res);
  37. db_free_string ( &sql);
  38. return DB_FAILED;
  39. }
  40. PQclear(res);
  41. db_free_string ( &sql);
  42. return DB_OK;
  43. }