From 9e3242d9482110ff0ebd36f99c4c4eb430bc56f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E8=B5=AB=E7=84=B6?= Date: Wed, 18 Sep 2024 11:35:39 +0800 Subject: [PATCH] Return error when failed to get user from database --- common/rpc-service.c | 6 +++--- common/user-mgr.c | 38 +++++++++++++++++++++++++++++--------- common/user-mgr.h | 5 +++-- fuse/getattr.c | 2 +- fuse/readdir.c | 2 +- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/common/rpc-service.c b/common/rpc-service.c index 1354685d..02d0e6d0 100644 --- a/common/rpc-service.c +++ b/common/rpc-service.c @@ -4726,7 +4726,7 @@ ccnet_rpc_get_emailuser (const char *email, GError **error) CcnetUserManager *user_mgr = seaf->user_mgr; CcnetEmailUser *emailuser = NULL; - emailuser = ccnet_user_manager_get_emailuser (user_mgr, email); + emailuser = ccnet_user_manager_get_emailuser (user_mgr, email, error); return (GObject *)emailuser; } @@ -4742,7 +4742,7 @@ ccnet_rpc_get_emailuser_with_import (const char *email, GError **error) CcnetUserManager *user_mgr = seaf->user_mgr; CcnetEmailUser *emailuser = NULL; - emailuser = ccnet_user_manager_get_emailuser_with_import (user_mgr, email); + emailuser = ccnet_user_manager_get_emailuser_with_import (user_mgr, email, error); return (GObject *)emailuser; } @@ -5448,7 +5448,7 @@ ccnet_rpc_get_org_emailusers (const char *url_prefix, int start , int limit, while (ptr) { char *email = ptr->data; CcnetEmailUser *emailuser = ccnet_user_manager_get_emailuser (user_mgr, - email); + email, NULL); if (emailuser != NULL) { ret = g_list_prepend (ret, emailuser); } diff --git a/common/user-mgr.c b/common/user-mgr.c index 18b680e4..86c7dffe 100644 --- a/common/user-mgr.c +++ b/common/user-mgr.c @@ -1147,26 +1147,41 @@ get_ldap_emailuser_cb (CcnetDBRow *row, void *data) static CcnetEmailUser* get_emailuser (CcnetUserManager *manager, const char *email, - gboolean import) + gboolean import, + GError **error) { CcnetDB *db = manager->priv->db; char *sql; CcnetEmailUser *emailuser = NULL; char *email_down; + int rc; sql = "SELECT e.id, e.email, is_staff, is_active, ctime, passwd, reference_id, role " " FROM EmailUser e LEFT JOIN UserRole ON e.email = UserRole.email " " WHERE e.email=?"; - if (seaf_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, - 1, "string", email) > 0) { + rc = seaf_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, + 1, "string", email); + if (rc > 0) { return emailuser; + } else if (rc < 0) { + if (error) { + g_set_error (error, CCNET_DOMAIN, 500, "Database error"); + } + return NULL; } email_down = g_ascii_strdown (email, strlen(email)); - if (seaf_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, - 1, "string", email_down) > 0) { + rc = seaf_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, + 1, "string", email_down); + if (rc > 0) { g_free (email_down); return emailuser; + } else if (rc < 0) { + if (error) { + g_set_error (error, CCNET_DOMAIN, 500, "Database error"); + } + g_free (email_down); + return NULL; } #ifdef HAVE_LDAP @@ -1179,6 +1194,9 @@ get_emailuser (CcnetUserManager *manager, get_ldap_emailuser_cb, &emailuser, 1, "string", email_down); if (ret < 0) { + if (error) { + g_set_error (error, CCNET_DOMAIN, CCNET_ERR_INTERNAL, "Database error"); + } ccnet_warning ("get ldapuser from db failed.\n"); g_free (email_down); return NULL; @@ -1236,16 +1254,18 @@ get_emailuser (CcnetUserManager *manager, CcnetEmailUser* ccnet_user_manager_get_emailuser (CcnetUserManager *manager, - const char *email) + const char *email, + GError **error) { - return get_emailuser (manager, email, FALSE); + return get_emailuser (manager, email, FALSE, error); } CcnetEmailUser* ccnet_user_manager_get_emailuser_with_import (CcnetUserManager *manager, - const char *email) + const char *email, + GError **error) { - return get_emailuser (manager, email, TRUE); + return get_emailuser (manager, email, TRUE, error); } CcnetEmailUser* diff --git a/common/user-mgr.h b/common/user-mgr.h index cb44da26..1b070ff2 100644 --- a/common/user-mgr.h +++ b/common/user-mgr.h @@ -84,11 +84,12 @@ ccnet_user_manager_validate_emailuser (CcnetUserManager *manager, const char *passwd); CcnetEmailUser* -ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email); +ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email, GError **error); CcnetEmailUser* ccnet_user_manager_get_emailuser_with_import (CcnetUserManager *manager, - const char *email); + const char *email, + GError **error); CcnetEmailUser* ccnet_user_manager_get_emailuser_by_id (CcnetUserManager *manager, int id); diff --git a/fuse/getattr.c b/fuse/getattr.c index a91799a9..5466f7f8 100644 --- a/fuse/getattr.c +++ b/fuse/getattr.c @@ -35,7 +35,7 @@ static int getattr_user(SeafileSession *seaf, const char *user, struct stat *stb { CcnetEmailUser *emailuser; - emailuser = ccnet_user_manager_get_emailuser (seaf->user_mgr, user); + emailuser = ccnet_user_manager_get_emailuser (seaf->user_mgr, user, NULL); if (!emailuser) { return -ENOENT; } diff --git a/fuse/readdir.c b/fuse/readdir.c index fe689c14..f71cf3ce 100644 --- a/fuse/readdir.c +++ b/fuse/readdir.c @@ -94,7 +94,7 @@ static int readdir_user(SeafileSession *seaf, const char *user, GList *list = NULL, *p; GString *name; - emailuser = ccnet_user_manager_get_emailuser (seaf->user_mgr, user); + emailuser = ccnet_user_manager_get_emailuser (seaf->user_mgr, user, NULL); if (!emailuser) { return -ENOENT; }