From: Egor Date: Tue, 20 Jan 2026 19:22:13 +0000 (+0200) Subject: db: remove db_read_rhs X-Git-Url: https://git.patchysicp.xyz/?a=commitdiff_plain;h=810a43dab40639e63b49fba5350de0519465c1e9;p=patchyircd.git db: remove db_read_rhs --- diff --git a/src/db.cpp b/src/db.cpp index c5a7a53..944b25f 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -119,13 +119,3 @@ char *password_get(const char *key, const char *fn) { else return nullptr; } -const char *db_read_rhs(const char *key, const char *fn) { - if (fn == "certfp"sv) - return db_read_internal(key, db::disk("SELECT account FROM certfp WHERE fingerprint = ?;")); - else if (fn == "nicks"sv) - return db_read_internal(key, db::disk("SELECT account FROM nicks WHERE nick = ?;")); - else if (fn == "irccloud"sv) - return db_read_internal(key, db::disk("SELECT account FROM irccloud WHERE irccloudid = ?;")); - else - return nullptr; -} diff --git a/src/db.hpp b/src/db.hpp index 2e3ee70..ebf2444 100644 --- a/src/db.hpp +++ b/src/db.hpp @@ -62,5 +62,4 @@ namespace db { // deprecated old APIs from passwd.hpp char *password_get(const char *key, const char *fn); -const char *db_read_rhs(const char *key, const char *fn); #endif diff --git a/src/irc.cpp b/src/irc.cpp index 12a85fa..b75f4fd 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -379,10 +379,8 @@ int irc_process_line(Client *client, char *source, std::string_view command, int client->saslbufLen = q-(unsigned char *)client->saslbuf - parity; } client->saslbuf[client->saslbufLen] = '\0'; - const char *username; - int res; - res = -1; if (!client->saslexternal) { + const char *username; char *p = strchr(client->saslbuf, '\0')+1; username = p; if (username > client->saslbuf + client->saslbufLen) @@ -412,18 +410,21 @@ int irc_process_line(Client *client, char *source, std::string_view command, int } else { #ifdef HAVE_LIBTLS if (client->cctx && tls_peer_cert_provided(client->cctx)) { - username = db_read_rhs(tls_peer_cert_hash(client->cctx), "certfp"); - res = -!username; + std::string_view username; + auto stmt = db::disk("SELECT account FROM certfp WHERE fingerprint = ?;"); + stmt.bind(1, tls_peer_cert_hash(client->cctx)); + if (stmt.step()) + username = stmt.text(0); + if (username.data()) { + rpl_saslsuccess(), sendbuf(client); + client_chghost(client, username.data(), 0); + goto saslcleanup; + } } #endif } - if (res != -1) { - rpl_saslsuccess(), sendbuf(client); - client_chghost(client, username, 0); - } else { saslerr: - err_saslfail(), sendbuf(client); - } + err_saslfail(), sendbuf(client); saslcleanup: memset(client->saslbuf, 0, 1024); free(client->saslbuf); @@ -566,8 +567,12 @@ saslcleanup: stringlower(args[0]); desired_nick = args[0]; if (strcmp(desired_nick, client->username) != 0) { - const char *username = db_read_rhs(desired_nick, "nicks"); - if (!username || strcmp(username, client->username) != 0) + std::string_view username; + auto stmt = db::disk("SELECT account FROM nicks WHERE nick = ?;"); + stmt.bind(1, desired_nick); + if (stmt.step()) + username = stmt.text(0); + if (!username.data() || username != client->username) return err_nicknameinuse(client, desired_nick), sendbuf(client), 0; } }