priv.c 1.2 KB

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