summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-11-06 12:33:59 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-11-09 15:33:46 +0100
commit4ff7e466f9e96336e9111b2812b4790bc04727c6 (patch)
treecd17bd230e9bbd470ee65f4e5dabd343e32e4a94
parenteef26709738de724a41919d3a7079a90b4273908 (diff)
downloadsssd-4ff7e466f9e96336e9111b2812b4790bc04727c6.tar.gz
sssd-4ff7e466f9e96336e9111b2812b4790bc04727c6.tar.xz
sssd-4ff7e466f9e96336e9111b2812b4790bc04727c6.zip
DP: Drop dp_pam_err_to_string
Resolves: https://fedorahosted.org/sssd/ticket/2861 All back end requests were using pam_strerror() to print additional info about why request failed. Since pam_strerror() returns localized message and we don't know the locale beforehand, this message failed to be transferred through D-Bus, resulting in a crash.
-rw-r--r--src/providers/data_provider_be.c75
1 files changed, 23 insertions, 52 deletions
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index effa185f9..0cbfb0f5b 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -115,6 +115,23 @@ struct bet_queue_item {
};
+static const char *dp_err_to_string(int dp_err_type)
+{
+ switch (dp_err_type) {
+ case DP_ERR_OK:
+ return "Success";
+ case DP_ERR_OFFLINE:
+ return "Provider is Offline";
+ case DP_ERR_TIMEOUT:
+ return "Request timed out";
+ case DP_ERR_FATAL:
+ default:
+ return "Internal Error";
+ }
+
+ return "Unknown Error";
+}
+
#define REQ_PHASE_ACCESS 0
#define REQ_PHASE_SELINUX 1
@@ -616,37 +633,6 @@ static void be_reset_offline(struct be_ctx *ctx)
be_run_online_cb(ctx);
}
-static char *dp_pam_err_to_string(TALLOC_CTX *memctx, int dp_err_type, int errnum)
-{
- switch (dp_err_type) {
- case DP_ERR_OK:
- return talloc_asprintf(memctx, "Success (%s)",
- pam_strerror(NULL, errnum));
- break;
-
- case DP_ERR_OFFLINE:
- return talloc_asprintf(memctx,
- "Provider is Offline (%s)",
- pam_strerror(NULL, errnum));
- break;
-
- case DP_ERR_TIMEOUT:
- return talloc_asprintf(memctx,
- "Request timed out (%s)",
- pam_strerror(NULL, errnum));
- break;
-
- case DP_ERR_FATAL:
- default:
- return talloc_asprintf(memctx,
- "Internal Error (%s)",
- pam_strerror(NULL, errnum));
- break;
- }
-
- return NULL;
-}
-
static void get_subdomains_callback(struct be_req *req,
int dp_err_type,
int errnum,
@@ -659,7 +645,7 @@ static void get_subdomains_callback(struct be_req *req,
DEBUG(SSSDBG_TRACE_FUNC, "Backend returned: (%d, %d, %s) [%s]\n",
dp_err_type, errnum, errstr?errstr:"<NULL>",
- dp_pam_err_to_string(req, dp_err_type, errnum));
+ dp_err_to_string(dp_err_type));
be_queue_next_request(req, BET_SUBDOMAINS);
@@ -675,12 +661,7 @@ static void get_subdomains_callback(struct be_req *req,
if (errstr) {
err_msg = errstr;
} else {
- err_msg = dp_pam_err_to_string(req, dp_err_type, errnum);
- }
- if (!err_msg) {
- DEBUG(SSSDBG_CRIT_FAILURE,
- "Failed to set err_msg, Out of memory?\n");
- err_msg = "OOM";
+ err_msg = dp_err_to_string(dp_err_type);
}
sbus_request_return_and_finish(dbus_req,
@@ -819,12 +800,7 @@ static void acctinfo_callback(struct be_req *req,
if (errstr) {
err_msg = errstr;
} else {
- err_msg = dp_pam_err_to_string(req, dp_err_type, errnum);
- }
- if (!err_msg) {
- DEBUG(SSSDBG_CRIT_FAILURE,
- "Failed to set err_msg, Out of memory?\n");
- err_msg = "OOM";
+ err_msg = dp_err_to_string(dp_err_type);
}
sbus_request_return_and_finish(dbus_req,
@@ -1365,7 +1341,7 @@ static void be_pam_handler_callback(struct be_req *req,
DEBUG(SSSDBG_CONF_SETTINGS, "Backend returned: (%d, %d, %s) [%s]\n",
dp_err_type, errnum, errstr?errstr:"<NULL>",
- dp_pam_err_to_string(req, dp_err_type, errnum));
+ dp_err_to_string(dp_err_type));
pd = talloc_get_type(be_req_get_data(req), struct pam_data);
@@ -1918,12 +1894,7 @@ static void be_autofs_handler_callback(struct be_req *req,
if (errstr) {
err_msg = errstr;
} else {
- err_msg = dp_pam_err_to_string(req, dp_err_type, errnum);
- }
- if (!err_msg) {
- DEBUG(SSSDBG_CRIT_FAILURE,
- "Failed to set err_msg, Out of memory?\n");
- err_msg = "OOM";
+ err_msg = dp_err_to_string(dp_err_type);
}
sbus_request_return_and_finish(dbus_req,
@@ -2208,7 +2179,7 @@ static void check_online_callback(struct be_req *req, int dp_err_type,
DEBUG(SSSDBG_CONF_SETTINGS, "Backend returned: (%d, %d, %s) [%s]\n",
dp_err_type, errnum, errstr?errstr:"<NULL>",
- dp_pam_err_to_string(req, dp_err_type, errnum));
+ dp_err_to_string(dp_err_type));
req->be_ctx->check_online_ref_count--;