rest: prevent repo deletion if it is in use

Check if the repo is used by any client before the deletion in
/repository/delete
master
Alejandro Sirgo Rica 2024-12-16 11:59:15 +01:00
parent 5e21716afb
commit 31d426b018
1 changed files with 24 additions and 0 deletions

View File

@ -5233,6 +5233,30 @@ static int og_cmd_post_repository_delete(struct og_rest_ctx *ctx)
return -1;
}
result = dbi_conn_queryf(dbi->conn,
"SELECT idrepositorio FROM ordenadores "
"WHERE idrepositorio=%u",
repo_id);
if (!result) {
dbi_conn_error(dbi->conn, &msglog);
syslog(LOG_ERR, "failed to query database (%s:%d) %s\n",
__func__, __LINE__, msglog);
og_dbi_close(dbi);
ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR;
return -1;
}
if (dbi_result_get_numrows(result) > 0) {
syslog(LOG_ERR, "Repository of id %u in use by clients\n",
repo_id);
dbi_result_free(result);
og_dbi_close(dbi);
ctx->http_error = OG_HTTP_423_LOCKED;
return -1;
}
dbi_result_free(result);
result = dbi_conn_queryf(dbi->conn,
"DELETE FROM repositorios "
"WHERE idrepositorio=%u OR alias=%u",