#include #include #include "libpq-fe.h" #include #include #include #include #define BDD_PASS_FILE "/srv/bdd/pipi-system.pass" #define BDD_CONN_LENGTH 255 int main(int argc, char **argv) { char connInfo[BDD_CONN_LENGTH] = "dbname='pipi' user=pipisys password='"; FILE *dbPassFile; char ch; int pos = strlen(connInfo); PGconn *conn; PGresult *res; int i; // Récupère le mdp à la BDD dbPassFile = fopen(BDD_PASS_FILE,"r"); if (dbPassFile == NULL) { fprintf(stderr,"Cannot open file %s, on peut pas se connecter à la base de données pour lister les clés en tant que %d -> fopen error %d\n", BDD_PASS_FILE,geteuid(),errno); return 1; } while (feof(dbPassFile)) { connInfo[pos] = fgetc(dbPassFile); pos++; } fclose(dbPassFile); connInfo[pos] = '\''; // Connecte à la BDD conn = PQconnectdb(connInfo); if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); PQfinish(conn); return 1; } res = PQexec(conn, "SELECT pg_catalog.set_config('search_path', '', false)"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "SET failed: %s", PQerrorMessage(conn)); PQclear(res); PQfinish(conn); return 1; } PQclear(res); // Demande les données à la BDD res = PQexec(conn,"SELECT \"sshKeyType\",\"sshPubKey\" FROM git.keys"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr,"Impossible de lancer la requête SQL pour les autorisations: %s",PQerrorMessage(conn)); PQclear(res); PQfinish(conn); return 1; } // Renvoie le résultat à travers stdout for (i = 0; i < PQntuples(res); i++) { printf("%s %s\n",PQgetvalue(res,i,0),PQgetvalue(res,i,1)); } PQclear(res); PQfinish(conn); return 0; }