]> PatchyGit - patchyircd.git/commitdiff
db: remove db_read_rhs
authorEgor <egor@patchysicp.xyz>
Tue, 20 Jan 2026 19:22:13 +0000 (21:22 +0200)
committerEgor <egor@patchysicp.xyz>
Tue, 20 Jan 2026 19:22:13 +0000 (21:22 +0200)
src/db.cpp
src/db.hpp
src/irc.cpp

index c5a7a53..944b25f 100644 (file)
@@ -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;
-}
index 2e3ee70..ebf2444 100644 (file)
@@ -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
index 12a85fa..b75f4fd 100644 (file)
@@ -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;
                        }
                }