]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/nfsdcld/sqlite.c
nfsdcld: add remove functionality
[nfs-utils.git] / utils / nfsdcld / sqlite.c
index f70568e1b4726df61aba872269ccdfc7e4aba97e..a198c34aa6537737a350da2081a0819007482336 100644 (file)
@@ -251,3 +251,39 @@ out_err:
        sqlite3_finalize(stmt);
        return ret;
 }
+
+/* Remove a client record */
+int
+sqlite_remove_client(const unsigned char *clname, const size_t namelen)
+{
+       int ret;
+       sqlite3_stmt *stmt = NULL;
+
+       ret = sqlite3_prepare_v2(dbh, "DELETE FROM clients WHERE id==?", -1,
+                                &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               xlog(L_ERROR, "%s: statement prepare failed: %s",
+                               __func__, sqlite3_errmsg(dbh));
+               goto out_err;
+       }
+
+       ret = sqlite3_bind_blob(stmt, 1, (const void *)clname, namelen,
+                               SQLITE_STATIC);
+       if (ret != SQLITE_OK) {
+               xlog(L_ERROR, "%s: bind blob failed: %s", __func__,
+                               sqlite3_errmsg(dbh));
+               goto out_err;
+       }
+
+       ret = sqlite3_step(stmt);
+       if (ret == SQLITE_DONE)
+               ret = SQLITE_OK;
+       else
+               xlog(L_ERROR, "%s: unexpected return code from delete: %d",
+                               __func__, ret);
+
+out_err:
+       xlog(D_GENERAL, "%s: returning %d", __func__, ret);
+       sqlite3_finalize(stmt);
+       return ret;
+}