URL: https://github.com/SSSD/sssd/pull/902
Author: alexal
 Title: #902: Added ERROR and PRINT macros to the tools
Action: opened

PR body:
"""
Tools: Added ERROR and PRINT macros to the tools

Replaced functions printf and fprintf with corresponding PRINT and ERROR macro 
in the tools.

Resolves: https://pagure.io/SSSD/sssd/issue/3078
"""

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/902/head:pr902
git checkout pr902
From f304e747f3827475f64cd71575bf4fb9e8f6e05c Mon Sep 17 00:00:00 2001
From: Alex Rodin <alex.ro...@sas.com>
Date: Tue, 15 Oct 2019 14:47:32 -0400
Subject: [PATCH] Added ERROR and PRINT macros to the tools

Tools: Added ERROR and PRINT macros to the tools

Replaced functions printf and fprintf with corresponding PRINT and ERROR macro in the tools.

Resolves: https://pagure.io/SSSD/sssd/issue/3078
---
 src/tools/common/sss_tools.c                  | 28 +++----
 src/tools/sss_groupshow.c                     | 24 +++---
 src/tools/sss_override.c                      | 44 +++++------
 src/tools/sss_seed.c                          |  4 +-
 src/tools/sssctl/sssctl.c                     | 36 ++++-----
 src/tools/sssctl/sssctl_access_report.c       |  4 +-
 src/tools/sssctl/sssctl_cache.c               | 14 ++--
 src/tools/sssctl/sssctl_cert.c                |  4 +-
 src/tools/sssctl/sssctl_config.c              | 18 ++---
 src/tools/sssctl/sssctl_data.c                | 24 +++---
 src/tools/sssctl/sssctl_domains.c             | 32 ++++----
 src/tools/sssctl/sssctl_logs.c                | 14 ++--
 src/tools/sssctl/sssctl_systemd.c             |  2 +-
 src/tools/sssctl/sssctl_user_checks.c         | 78 +++++++++----------
 .../sssd_check_socket_activated_responders.c  |  3 +-
 src/tools/tools_util.c                        |  4 +-
 16 files changed, 164 insertions(+), 169 deletions(-)

diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c
index 0d918f164e..0f60fcfaf0 100644
--- a/src/tools/common/sss_tools.c
+++ b/src/tools/common/sss_tools.c
@@ -32,10 +32,10 @@
 
 static void sss_tool_print_common_opts(int min_len)
 {
-    fprintf(stderr, _("Help options:\n"));
-    fprintf(stderr, "  %-*s\t %s\n", min_len, "-?, --help",
+    ERROR(_("Help options:\n"));
+    ERROR("  %-*s\t %s\n", min_len, "-?, --help",
                     _("Show this for a command"));
-    fprintf(stderr, "  %-*s\t %s\n", min_len, "--usage",
+    ERROR("  %-*s\t %s\n", min_len, "--usage",
                     _("Show brief usage message for a command"));
 }
 
@@ -241,26 +241,26 @@ void sss_tool_usage(const char *tool_name, struct sss_route_cmd *commands)
     int min_len;
     int i;
 
-    fprintf(stderr, _("Usage:\n%s COMMAND COMMAND-ARGS\n\n"), tool_name);
-    fprintf(stderr, _("Available commands:\n"));
+    ERROR(_("Usage:\n%s COMMAND COMMAND-ARGS\n\n"), tool_name);
+    ERROR(_("Available commands:\n"));
 
     min_len = sss_tool_max_length(commands);
 
     for (i = 0; commands[i].command != NULL; i++) {
         if (sss_tool_is_delimiter(&commands[i])) {
-            fprintf(stderr, "\n%s\n", commands[i].description);
+            ERROR("\n%s\n", commands[i].description);
             continue;
         }
 
         if (commands[i].description == NULL) {
-            fprintf(stderr, "* %40s\n", commands[i].command);
+            ERROR("* %40s\n", commands[i].command);
         } else {
-            fprintf(stderr, "* %-*s\t %s\n",
+            ERROR("* %-*s\t %s\n",
                     min_len, commands[i].command, commands[i].description);
         }
     }
 
-    fprintf(stderr, _("\n"));
+    ERROR(_("\n"));
     sss_tool_print_common_opts(min_len);
 }
 
@@ -433,7 +433,7 @@ errno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
                 goto done;
             }
         } else {
-            fprintf(stderr, _("Invalid option %s: %s\n\n"),
+            ERROR(_("Invalid option %s: %s\n\n"),
                     poptBadOption(pc, 0), poptStrerror(ret));
             poptPrintHelp(pc, stderr, 0);
             ret = EINVAL;
@@ -445,7 +445,7 @@ errno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
     fopt = poptGetArg(pc);
     if (_fopt != NULL) {
         if (fopt == NULL) {
-            fprintf(stderr, _("Missing option: %s\n\n"), fopt_help);
+            ERROR(_("Missing option: %s\n\n"), fopt_help);
             poptPrintHelp(pc, stderr, 0);
             ret = EINVAL;
             goto done;
@@ -453,7 +453,7 @@ errno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
 
         /* No more arguments expected. If something follows it is an error. */
         if (poptGetArg(pc)) {
-            fprintf(stderr, _("Only one free argument is expected!\n\n"));
+            ERROR(_("Only one free argument is expected!\n\n"));
             poptPrintHelp(pc, stderr, 0);
             ret = EINVAL;
             goto done;
@@ -462,7 +462,7 @@ errno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
         *_fopt = fopt;
     } else if (_fopt == NULL && fopt != NULL) {
         /* Unexpected free argument. */
-        fprintf(stderr, _("Unexpected parameter: %s\n\n"), fopt);
+        ERROR(_("Unexpected parameter: %s\n\n"), fopt);
         poptPrintHelp(pc, stderr, 0);
         ret = EINVAL;
         goto done;
@@ -474,7 +474,7 @@ errno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
 
         /* If at least one option is required and not provided, print error. */
         if (require_option == SSS_TOOL_OPT_REQUIRED) {
-            fprintf(stderr, _("At least one option is required!\n\n"));
+            ERROR(_("At least one option is required!\n\n"));
             poptPrintHelp(pc, stderr, 0);
             ret = EINVAL;
             goto done;
diff --git a/src/tools/sss_groupshow.c b/src/tools/sss_groupshow.c
index ac4c3dc912..17ab17a2ac 100644
--- a/src/tools/sss_groupshow.c
+++ b/src/tools/sss_groupshow.c
@@ -612,26 +612,26 @@ static void print_group_info(struct group_info *g, unsigned level)
     snprintf(fmt, 8, "%%%ds", level*PADDING_SPACES);
     snprintf(padding, 512, fmt, "");
 
-    printf(_("%1$s%2$sGroup: %3$s\n"), padding,
+    PRINT(_("%1$s%2$sGroup: %3$s\n"), padding,
                                  g->mpg ? _("Magic Private ") : "",
                                  g->name);
-    printf(_("%1$sGID number: %2$d\n"), padding, g->gid);
+    PRINT(_("%1$sGID number: %2$d\n"), padding, g->gid);
 
-    printf(_("%1$sMember users: "), padding);
+    PRINT(_("%1$sMember users: "), padding);
     if (g->user_members) {
         for (i=0; g->user_members[i]; ++i) {
-            printf("%s%s", i>0 ? "," : "",
+            PRINT("%s%s", i>0 ? "," : "",
                            g->user_members[i]);
         }
     }
-    printf(_("\n%1$sIs a member of: "), padding);
+    PRINT(_("\n%1$sIs a member of: "), padding);
     if (g->memberofs) {
         for (i=0; g->memberofs[i]; ++i) {
-            printf("%s%s", i>0 ? "," : "",
+            PRINT("%s%s", i>0 ? "," : "",
                            g->memberofs[i]);
         }
     }
-    printf(_("\n%1$sMember groups: "), padding);
+    PRINT(_("\n%1$sMember groups: "), padding);
 }
 
 static void print_recursive(struct group_info **group_members, unsigned level)
@@ -644,9 +644,9 @@ static void print_recursive(struct group_info **group_members, unsigned level)
 
     level++;
     for (i=0; group_members[i]; ++i) {
-        printf("\n");
+        PRINT("\n");
         print_group_info(group_members[i], level);
-        printf("\n");
+        PRINT("\n");
         print_recursive(group_members[i]->group_members, level);
     }
 }
@@ -756,16 +756,16 @@ int main(int argc, const char **argv)
     /* print the results */
     print_group_info(root, 0);
     if (pc_recursive) {
-        printf("\n");
+        PRINT("\n");
         print_recursive(root->group_members, 0);
     } else {
         if (root->group_members) {
             for (i=0; root->group_members[i]; ++i) {
-                printf("%s%s", i>0 ? "," : "",
+                PRINT("%s%s", i>0 ? "," : "",
                        root->group_members[i]->name);
             }
         }
-        printf("\n");
+        PRINT("\n");
     }
 
 fini:
diff --git a/src/tools/sss_override.c b/src/tools/sss_override.c
index a12aa2785b..b2ad99fc84 100644
--- a/src/tools/sss_override.c
+++ b/src/tools/sss_override.c
@@ -80,7 +80,7 @@ static errno_t parse_cmdline(struct sss_cmdline *cmdline,
     ret = sss_tool_parse_name(tool_ctx, tool_ctx, input_name,
                               &orig_name, &domain);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to parse name %s.\n"), input_name);
+        ERROR(_("Unable to parse name %s.\n"), input_name);
         return ret;
     }
 
@@ -184,7 +184,7 @@ static errno_t parse_cmdline_find(struct sss_cmdline *cmdline,
     dom = find_domain_by_name(tool_ctx->domains, domname, true);
     if (dom == NULL) {
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to find domain %s\n", domname);
-        fprintf(stderr, _("Unable to find domain %s\n"), domname);
+        ERROR(_("Unable to find domain %s\n"), domname);
         return EINVAL;
     }
 
@@ -253,7 +253,7 @@ static errno_t prepare_view(struct sss_domain_info *domain)
 
     ret = sysdb_update_view_name(domain->sysdb, LOCALVIEW);
     if (ret == EOK) {
-        printf("SSSD needs to be restarted for the changes to take effect.\n");
+        PRINT("SSSD needs to be restarted for the changes to take effect.\n");
     }
 
 done:
@@ -267,11 +267,11 @@ errno_t prepare_view_msg(struct sss_domain_info *domain)
 
     ret = prepare_view(domain);
     if (ret == EEXIST) {
-        fprintf(stderr, _("Other than " LOCALVIEW " view already exists "
-                "in domain %s.\n"), domain->name);
+        ERROR(_("Other than " LOCALVIEW " view already exists "
+                                        "in domain %s.\n"), domain->name);
     } else if (ret != EOK) {
-        fprintf(stderr, _("Unable to prepare " LOCALVIEW
-                " view in domain %s.\n"), domain->name);
+        ERROR(_("Unable to prepare " LOCALVIEW
+                                    " view in domain %s.\n"), domain->name);
     }
 
     return ret;
@@ -580,8 +580,7 @@ static errno_t get_user_domain_msg(struct sss_tool_ctx *tool_ctx,
                                user->domain, tool_ctx->domains);
     if (newdom == NULL) {
         domname = user->domain == NULL ? "[unknown]" : user->domain->name;
-        fprintf(stderr, _("Unable to find user %s@%s.\n"),
-                user->orig_name, domname);
+        ERROR(_("Unable to find user %s@%s.\n"), user->orig_name, domname);
         return ENOENT;
     }
 
@@ -605,8 +604,7 @@ static errno_t get_group_domain_msg(struct sss_tool_ctx *tool_ctx,
                                group->domain, tool_ctx->domains);
     if (newdom == NULL) {
         domname = group->domain == NULL ? "[unknown]" : group->domain->name;
-        fprintf(stderr, _("Unable to find group %s@%s.\n"),
-                group->orig_name, domname);
+        ERROR(_("Unable to find group %s@%s.\n"), group->orig_name, domname);
         return ENOENT;
     }
 
@@ -756,12 +754,12 @@ static errno_t override_fqn(TALLOC_CTX *mem_ctx,
     if (ret == EAGAIN) {
         DEBUG(SSSDBG_OP_FAILURE, "Unable to find domain from "
               "fqn %s\n", input);
-        fprintf(stderr, _("Changing domain is not allowed!\n"));
+        ERROR(_("Changing domain is not allowed!\n"));
         ret = EINVAL;
     } else if (ret == EOK && dom != NULL && dom != domain) {
         DEBUG(SSSDBG_OP_FAILURE, "Trying to change domain from "
               "%s to %s, not allowed!\n", domain->name, dom->name);
-        fprintf(stderr, _("Changing domain is not allowed!\n"));
+        ERROR(_("Changing domain is not allowed!\n"));
         ret = EINVAL;
     } else if (ret != EOK) {
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse name %s [%d]: %s\n",
@@ -1293,8 +1291,8 @@ static errno_t user_export(const char *filename,
 
     db = sss_colondb_open(tmp_ctx, SSS_COLONDB_WRITE, filename);
     if (db == NULL) {
-        fprintf(stderr, _("Unable to open %s.\n"),
-                filename == NULL ? "stdout" : filename);
+        ERROR(_("Unable to open %s.\n"),
+              filename == NULL ? "stdout" : filename);
         ret = EIO;
         goto done;
     }
@@ -1363,8 +1361,8 @@ static errno_t group_export(const char *filename,
 
     db = sss_colondb_open(tmp_ctx, SSS_COLONDB_WRITE, filename);
     if (db == NULL) {
-        fprintf(stderr, _("Unable to open %s.\n"),
-                filename == NULL ? "stdout" : filename);
+        ERROR(_("Unable to open %s.\n"),
+              filename == NULL ? "stdout" : filename);
         ret = EIO;
         goto done;
     }
@@ -1600,7 +1598,7 @@ static int override_user_import(struct sss_cmdline *cmdline,
 
     db = sss_colondb_open(tool_ctx, SSS_COLONDB_READ, filename);
     if (db == NULL) {
-        fprintf(stderr, _("Unable to open %s.\n"), filename);
+        ERROR(_("Unable to open %s.\n"), filename);
         ret = EIO;
         goto done;
     }
@@ -1611,7 +1609,7 @@ static int override_user_import(struct sss_cmdline *cmdline,
         ret = sss_tool_parse_name(tool_ctx, tool_ctx, obj.input_name,
                                   &obj.orig_name, &obj.domain);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to parse name %s.\n"), obj.input_name);
+            ERROR(_("Unable to parse name %s.\n"), obj.input_name);
             goto done;
         }
 
@@ -1629,7 +1627,7 @@ static int override_user_import(struct sss_cmdline *cmdline,
     }
 
     if (ret != EOF) {
-        fprintf(stderr, _("Invalid format on line %d. "
+        ERROR(_("Invalid format on line %d. "
                 "Use --debug option for more information.\n"), linenum);
         goto done;
     }
@@ -1851,7 +1849,7 @@ static int override_group_import(struct sss_cmdline *cmdline,
 
     db = sss_colondb_open(tool_ctx, SSS_COLONDB_READ, filename);
     if (db == NULL) {
-        fprintf(stderr, _("Unable to open %s.\n"), filename);
+        ERROR(_("Unable to open %s.\n"), filename);
         ret = EIO;
         goto done;
     }
@@ -1862,7 +1860,7 @@ static int override_group_import(struct sss_cmdline *cmdline,
         ret = sss_tool_parse_name(tool_ctx, tool_ctx, obj.input_name,
                                   &obj.orig_name, &obj.domain);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to parse name %s.\n"), obj.input_name);
+            ERROR(_("Unable to parse name %s.\n"), obj.input_name);
             goto done;
         }
 
@@ -1880,7 +1878,7 @@ static int override_group_import(struct sss_cmdline *cmdline,
     }
 
     if (ret != EOF) {
-        fprintf(stderr, _("Invalid format on line %d. "
+        ERROR(_("Invalid format on line %d. "
                 "Use --debug option for more information.\n"), linenum);
         goto done;
     }
diff --git a/src/tools/sss_seed.c b/src/tools/sss_seed.c
index 564f5b3b9e..a708c9fa21 100644
--- a/src/tools/sss_seed.c
+++ b/src/tools/sss_seed.c
@@ -871,9 +871,9 @@ int main(int argc, const char **argv)
         goto done;
     } else {
         if (sctx->user_cached == false) {
-            printf(_("User cache entry created for %1$s\n"), sctx->uctx->name);
+            PRINT(_("User cache entry created for %1$s\n"), sctx->uctx->name);
         }
-        printf(_("Temporary password added to cache entry for %1$s\n"),
+        PRINT(_("Temporary password added to cache entry for %1$s\n"),
                  sctx->uctx->name);
     }
 
diff --git a/src/tools/sssctl/sssctl.c b/src/tools/sssctl/sssctl.c
index 4a50a1d86b..b1176a3dbe 100644
--- a/src/tools/sssctl/sssctl.c
+++ b/src/tools/sssctl/sssctl.c
@@ -55,7 +55,7 @@ sssctl_prompt(const char *message,
 
     do {
         if (defval != SSSCTL_PROMPT_ERROR) {
-            printf("%s (%s/%s) [%s] ", message, yes, no,
+            PRINT("%s (%s/%s) [%s] ", message, yes, no,
                                        sssctl_prompt_str(defval));
 
             /* Detect empty line. */
@@ -66,7 +66,7 @@ sssctl_prompt(const char *message,
                 ungetc(c, stdin);
             }
         } else {
-            printf("%s (%s/%s)", message, yes, no);
+            PRINT("%s (%s/%s)", message, yes, no);
         }
 
         ret = scanf("%254s", answer);
@@ -75,7 +75,7 @@ sssctl_prompt(const char *message,
         while ((c = getchar()) != '\n' && c != EOF);
 
         if (ret != 1) {
-            fprintf(stderr, _("Unable to read user input\n"));
+            ERROR(_("Unable to read user input\n"));
             return SSSCTL_PROMPT_ERROR;
         }
 
@@ -88,7 +88,7 @@ sssctl_prompt(const char *message,
             return SSSCTL_PROMPT_NO;
         }
 
-        fprintf(stderr, _("Invalid input, please provide either "
+        ERROR(_("Invalid input, please provide either "
                 "'%s' or '%s'.\n"), yes, no);
 
         attempts++;
@@ -106,12 +106,12 @@ errno_t sssctl_run_command(const char *command)
     ret = system(command);
     if (ret == -1) {
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to execute %s\n", command);
-        fprintf(stderr, _("Error while executing external command\n"));
+        ERROR(_("Error while executing external command\n"));
         return EFAULT;
     } else if (WEXITSTATUS(ret) != 0) {
         DEBUG(SSSDBG_CRIT_FAILURE, "Command %s failed with [%d]\n",
               command, WEXITSTATUS(ret));
-        fprintf(stderr, _("Error while executing external command\n"));
+        ERROR(_("Error while executing external command\n"));
         return EIO;
     }
 
@@ -170,12 +170,12 @@ bool sssctl_start_sssd(bool force)
     case EOK:
         return true;
     case ENOSYS:
-        fprintf(stderr, "Starting SSSD automatically is not supported "
-                        "on this platform, please start the service "
-                        "manually\n");
+        ERROR("Starting SSSD automatically is not supported "
+              "on this platform, please start the service "
+              "manually\n");
         return false;
     default:
-        fprintf(stderr, "Unable to start SSSD!\n");
+        ERROR("Unable to start SSSD!\n");
         return false;
     }
 
@@ -209,12 +209,12 @@ bool sssctl_stop_sssd(bool force)
     case EOK:
         return true;
     case ENOSYS:
-        fprintf(stderr, "Stopping SSSD automatically is not supported "
-                        "on this platform, please stop the service "
-                        "manually\n");
+        ERROR("Stopping SSSD automatically is not supported "
+              "on this platform, please stop the service "
+              "manually\n");
         return false;
     default:
-        fprintf(stderr, "Unable to stop SSSD!\n");
+        ERROR("Unable to stop SSSD!\n");
         return false;
     }
 
@@ -245,12 +245,12 @@ bool sssctl_restart_sssd(bool force)
     case EOK:
         return true;
     case ENOSYS:
-        fprintf(stderr, "Restarting SSSD automatically is not supported "
-                        "on this platform, please restart the service "
-                        "manually\n");
+        ERROR("Restarting SSSD automatically is not supported "
+              "on this platform, please restart the service "
+              "manually\n");
         return false;
     default:
-        fprintf(stderr, "Unable to restart SSSD!\n");
+        ERROR("Unable to restart SSSD!\n");
         return false;
     }
 
diff --git a/src/tools/sssctl/sssctl_access_report.c b/src/tools/sssctl/sssctl_access_report.c
index 80087b248e..b6b6c75798 100644
--- a/src/tools/sssctl/sssctl_access_report.c
+++ b/src/tools/sssctl/sssctl_access_report.c
@@ -282,14 +282,14 @@ static errno_t refresh_hbac_rules(struct sss_tool_ctx *tool_ctx,
 
     path = sbus_opath_compose(tmp_ctx, IFP_PATH_DOMAINS, domain->name);
     if (path == NULL) {
-        printf(_("Out of memory!\n"));
+        PRINT(_("Out of memory!\n"));
         ret = ENOMEM;
         goto done;
     }
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
index e0d067cfbe..3987f45b46 100644
--- a/src/tools/sssctl/sssctl_cache.c
+++ b/src/tools/sssctl/sssctl_cache.c
@@ -515,12 +515,12 @@ static errno_t sssctl_print_object(struct sssctl_object_info *info,
                               obj_type, attr_name, attr_value,
                               &entry, &dom);
     if (ret == ENOENT) {
-        printf(noent_fmt, attr_value);
+        PRINT(noent_fmt, attr_value);
         ret = EOK;
         goto done;
     } else if (ret != EOK) {
-        fprintf(stderr, _("Error: Unable to get object [%d]: %s\n"),
-                ret, sss_strerror(ret));
+        ERROR(_("Error: Unable to get object [%d]: %s\n"),
+              ret, sss_strerror(ret));
         goto done;
     }
 
@@ -535,12 +535,12 @@ static errno_t sssctl_print_object(struct sssctl_object_info *info,
         if (ret == ENOENT) {
             continue;
         } else if (ret != EOK) {
-            fprintf(stderr, _("%s: Unable to read value [%d]: %s\n"),
-                    info[i].msg, ret, sss_strerror(ret));
+            ERROR(_("%s: Unable to read value [%d]: %s\n"),
+                  info[i].msg, ret, sss_strerror(ret));
             continue;
         }
 
-        printf("%s: %s\n", info[i].msg, value);
+        PRINT("%s: %s\n", info[i].msg, value);
     }
 
     ret = EOK;
@@ -573,7 +573,7 @@ static errno_t parse_cmdline(struct sss_cmdline *cmdline,
     ret = sss_tool_parse_name(tool_ctx, tool_ctx, input_name,
                               &orig_name, &domain);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to parse name %s.\n"), input_name);
+        ERROR(_("Unable to parse name %s.\n"), input_name);
         return ret;
     }
 
diff --git a/src/tools/sssctl/sssctl_cert.c b/src/tools/sssctl/sssctl_cert.c
index 863ff8d978..242631b988 100644
--- a/src/tools/sssctl/sssctl_cert.c
+++ b/src/tools/sssctl/sssctl_cert.c
@@ -83,7 +83,7 @@ errno_t sssctl_cert_show(struct sss_cmdline *cmdline,
         goto done;
     }
 
-    printf("%s\n", desc);
+    PRINT("%s\n", desc);
     ret = EOK;
 
 done:
@@ -142,7 +142,7 @@ errno_t sssctl_cert_map(struct sss_cmdline *cmdline,
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
diff --git a/src/tools/sssctl/sssctl_config.c b/src/tools/sssctl/sssctl_config.c
index ff382192a2..3d6f0fdb60 100644
--- a/src/tools/sssctl/sssctl_config.c
+++ b/src/tools/sssctl/sssctl_config.c
@@ -78,7 +78,7 @@ errno_t sssctl_config_check(struct sss_cmdline *cmdline,
     /* Check the file permissions */
     ret = sss_ini_config_access_check(init_data);
     if (ret != EOK) {
-        printf(_("File ownership and permissions check failed. "
+        PRINT(_("File ownership and permissions check failed. "
                "Expected root:root and 0600.\n"));
         ret = EPERM;
         goto done;
@@ -101,35 +101,35 @@ errno_t sssctl_config_check(struct sss_cmdline *cmdline,
     }
 
     /* Output from validators */
-    printf(_("Issues identified by validators: %zu\n"), num_errors);
+    PRINT(_("Issues identified by validators: %zu\n"), num_errors);
     for (i = 0; i < num_errors; i++) {
-        printf("%s\n", strs[i]);
+        PRINT("%s\n", strs[i]);
     }
 
     /* Merging issues */
     ra = sss_ini_get_ra_error_list(init_data);
     num_ra_error = ref_array_len(ra);
 
-    printf("\n");
-    printf(_("Messages generated during configuration merging: %zu\n"),
+    PRINT("\n");
+    PRINT(_("Messages generated during configuration merging: %zu\n"),
            num_ra_error);
 
     i = 0;
     while (ref_array_get(ra, i, &msg) != NULL) {
-        printf("%s\n", msg);
+        PRINT("%s\n", msg);
         i++;
     }
 
     /* Used snippet files */
     ra = sss_ini_get_ra_success_list(init_data);
 
-    printf("\n");
-    printf(_("Used configuration snippet files: %u\n"),
+    PRINT("\n");
+    PRINT(_("Used configuration snippet files: %u\n"),
            ref_array_len(ra));
 
     i = 0;
     while (ref_array_get(ra, i, &msg) != NULL) {
-        printf("%s\n", msg);
+        PRINT("%s\n", msg);
         i++;
     }
 
diff --git a/src/tools/sssctl/sssctl_data.c b/src/tools/sssctl/sssctl_data.c
index cc46cafbfa..9b84a45289 100644
--- a/src/tools/sssctl/sssctl_data.c
+++ b/src/tools/sssctl/sssctl_data.c
@@ -86,8 +86,8 @@ static errno_t sssctl_backup(bool force)
 
     ret = sssctl_create_backup_dir(SSS_BACKUP_DIR);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to create backup directory [%d]: %s"),
-                ret, sss_strerror(ret));
+        ERROR(_("Unable to create backup directory [%d]: %s"),
+              ret, sss_strerror(ret));
         return ret;
     }
 
@@ -108,14 +108,14 @@ static errno_t sssctl_backup(bool force)
     ret = sssctl_run_command("sss_override user-export "
                              SSS_BACKUP_USER_OVERRIDES);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to export user overrides\n"));
+        ERROR(_("Unable to export user overrides\n"));
         return ret;
     }
 
     ret = sssctl_run_command("sss_override group-export "
                              SSS_BACKUP_GROUP_OVERRIDES);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to export group overrides\n"));
+        ERROR(_("Unable to export group overrides\n"));
         return ret;
     }
 
@@ -161,7 +161,7 @@ static errno_t sssctl_restore(bool force_start, bool force_restart)
         ret = sssctl_run_command("sss_override user-import "
                                  SSS_BACKUP_USER_OVERRIDES);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to import user overrides\n"));
+            ERROR(_("Unable to import user overrides\n"));
             return ret;
         }
     }
@@ -170,7 +170,7 @@ static errno_t sssctl_restore(bool force_start, bool force_restart)
         ret = sssctl_run_command("sss_override group-import "
                                  SSS_BACKUP_GROUP_OVERRIDES);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to import group overrides\n"));
+            ERROR(_("Unable to import group overrides\n"));
             return ret;
         }
     }
@@ -228,27 +228,27 @@ errno_t sssctl_cache_remove(struct sss_cmdline *cmdline,
     }
 
     if (!sssctl_stop_sssd(opts.stop)) {
-        fprintf(stderr, "Unable to remove the cache unless SSSD is stopped.\n");
+        ERROR("Unable to remove the cache unless SSSD is stopped.\n");
         return ERR_SSSD_RUNNING;
     }
 
-    printf(_("Creating backup of local data...\n"));
+    PRINT(_("Creating backup of local data...\n"));
     ret = sssctl_backup(opts.override);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to create backup of local data,"
+        ERROR(_("Unable to create backup of local data,"
                 " can not remove the cache.\n"));
         return ret;
     }
 
-    printf(_("Removing cache files...\n"));
+    PRINT(_("Removing cache files...\n"));
     ret = sss_remove_subtree(DB_PATH);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to remove cache files\n"));
+        ERROR(_("Unable to remove cache files\n"));
         return ret;
     }
 
     if (opts.restore) {
-        printf(_("Restoring local data...\n"));
+        PRINT(_("Restoring local data...\n"));
         sssctl_restore(opts.start, opts.start);
     } else {
         sssctl_start_sssd(opts.start);
diff --git a/src/tools/sssctl/sssctl_domains.c b/src/tools/sssctl/sssctl_domains.c
index 39e810c9d4..ad02f118aa 100644
--- a/src/tools/sssctl/sssctl_domains.c
+++ b/src/tools/sssctl/sssctl_domains.c
@@ -102,7 +102,7 @@ errno_t sssctl_domain_list(struct sss_cmdline *cmdline,
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
@@ -124,9 +124,9 @@ errno_t sssctl_domain_list(struct sss_cmdline *cmdline,
             }
 
             if (is_subdom) {
-                printf("Trusted domain: %s\n", name);
+                PRINT("Trusted domain: %s\n", name);
             } else {
-                printf("Primary domain: %s\n", name);
+                PRINT("Primary domain: %s\n", name);
             }
         }
 
@@ -164,7 +164,7 @@ sssctl_domain_status_online(struct sbus_sync_connection *conn,
         return ret;
     }
 
-    printf(_("Online status: %s\n"), is_online ? _("Online") : _("Offline"));
+    PRINT(_("Online status: %s\n"), is_online ? _("Online") : _("Offline"));
 
     return EOK;
 }
@@ -209,7 +209,7 @@ sssctl_domain_status_active_server(struct sbus_sync_connection *conn,
         goto done;
     }
 
-    printf(_("Active servers:\n"));
+    PRINT(_("Active servers:\n"));
     for (i = 0; services[i] != NULL; i++) {
         ret = sbus_call_ifp_domain_ActiveServer(tmp_ctx, conn, IFP_BUS,
                   domain_path, services[i], &server);
@@ -221,7 +221,7 @@ sssctl_domain_status_active_server(struct sbus_sync_connection *conn,
         }
 
         server = SBUS_REQ_STRING_DEFAULT(server, _("not connected"));
-        printf("%s: %s\n", proper_service_name(services[i]), server);
+        PRINT("%s: %s\n", proper_service_name(services[i]), server);
     }
 
     ret = EOK;
@@ -257,7 +257,7 @@ sssctl_domain_status_server_list(struct sbus_sync_connection *conn,
     }
 
     for (i = 0; services[i] != NULL; i++) {
-        printf(_("Discovered %s servers:\n"), proper_service_name(services[i]));
+        PRINT(_("Discovered %s servers:\n"), proper_service_name(services[i]));
 
         ret = sbus_call_ifp_domain_ListServers(tmp_ctx, conn, IFP_BUS,
                   domain_path, services[i], &servers);
@@ -274,10 +274,10 @@ sssctl_domain_status_server_list(struct sbus_sync_connection *conn,
         }
 
         for (j = 0; servers[j] != NULL; j++) {
-            printf("- %s\n", servers[j]);
+            PRINT("- %s\n", servers[j]);
         }
 
-        printf("\n");
+        PRINT("\n");
     }
 
     ret = EOK;
@@ -339,7 +339,7 @@ errno_t sssctl_domain_status(struct sss_cmdline *cmdline,
 
     path = sbus_opath_compose(tmp_ctx, IFP_PATH_DOMAINS, opts.domain);
     if (path == NULL) {
-        printf(_("Out of memory!\n"));
+        PRINT(_("Out of memory!\n"));
         ret = ENOMEM;
         goto done;
     }
@@ -351,7 +351,7 @@ errno_t sssctl_domain_status(struct sss_cmdline *cmdline,
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
@@ -359,27 +359,27 @@ errno_t sssctl_domain_status(struct sss_cmdline *cmdline,
     if (opts.online) {
         ret = sssctl_domain_status_online(conn, path);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to get online status\n"));
+            ERROR(_("Unable to get online status\n"));
             goto done;
         }
 
-        printf("\n");
+        PRINT("\n");
     }
 
     if (opts.active) {
         ret = sssctl_domain_status_active_server(conn, path);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to get online status\n"));
+            ERROR(_("Unable to get online status\n"));
             goto done;
         }
 
-        printf("\n");
+        PRINT("\n");
     }
 
     if (opts.servers) {
         ret = sssctl_domain_status_server_list(conn, path);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to get server list\n"));
+            ERROR(_("Unable to get server list\n"));
             goto done;
         }
     }
diff --git a/src/tools/sssctl/sssctl_logs.c b/src/tools/sssctl/sssctl_logs.c
index aca988c053..d14c90080a 100644
--- a/src/tools/sssctl/sssctl_logs.c
+++ b/src/tools/sssctl/sssctl_logs.c
@@ -245,19 +245,19 @@ errno_t sssctl_logs_remove(struct sss_cmdline *cmdline,
     }
 
     if (opts.delete) {
-        printf(_("Deleting log files...\n"));
+        PRINT(_("Deleting log files...\n"));
         ret = sss_remove_subtree(LOG_PATH);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to remove log files\n"));
+            ERROR(_("Unable to remove log files\n"));
             return ret;
         }
 
         sss_signal(SIGHUP);
     } else {
-        printf(_("Truncating log files...\n"));
+        PRINT(_("Truncating log files...\n"));
         ret = sssctl_run_command("truncate --size 0 " LOG_FILES);
         if (ret != EOK) {
-            fprintf(stderr, _("Unable to truncate log files\n"));
+            ERROR(_("Unable to truncate log files\n"));
             return ret;
         }
     }
@@ -283,13 +283,13 @@ errno_t sssctl_logs_fetch(struct sss_cmdline *cmdline,
 
     cmd = talloc_asprintf(tool_ctx, "tar -czf %s %s", file, LOG_FILES);
     if (cmd == NULL) {
-        fprintf(stderr, _("Out of memory!"));
+        ERROR(_("Out of memory!"));
     }
 
-    printf(_("Archiving log files into %s...\n"), file);
+    PRINT(_("Archiving log files into %s...\n"), file);
     ret = sssctl_run_command(cmd);
     if (ret != EOK) {
-        fprintf(stderr, _("Unable to archive log files\n"));
+        ERROR(_("Unable to archive log files\n"));
         return ret;
     }
 
diff --git a/src/tools/sssctl/sssctl_systemd.c b/src/tools/sssctl/sssctl_systemd.c
index 28eb71ab1d..68e95e7516 100644
--- a/src/tools/sssctl/sssctl_systemd.c
+++ b/src/tools/sssctl/sssctl_systemd.c
@@ -51,7 +51,7 @@ static errno_t sssctl_systemd_call(systemd_method method)
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
diff --git a/src/tools/sssctl/sssctl_user_checks.c b/src/tools/sssctl/sssctl_user_checks.c
index 5fb207e2db..c5d410df8c 100644
--- a/src/tools/sssctl/sssctl_user_checks.c
+++ b/src/tools/sssctl/sssctl_user_checks.c
@@ -66,9 +66,9 @@ static struct pam_conv conv = {
 
 #define PRINT_IFP_PROPERTY(all, name, fmt) do { \
     if (all->name.is_set) { \
-        fprintf(stdout, " - %s: %" fmt "\n", #name, user->name.value); \
+        ERROR(stdout, " - %s: %" fmt "\n", #name, user->name.value); \
     } else { \
-        fprintf(stdout, " - %s: not set\n", #name); \
+        ERROR(" - %s: not set\n", #name); \
     } \
 } while (0)
 
@@ -92,7 +92,7 @@ static errno_t get_ifp_user(const char *username)
 
     conn = sbus_sync_connect_system(tmp_ctx, NULL);
     if (conn == NULL) {
-        fprintf(stderr, _("Unable to connect to system bus!\n"));
+        ERROR(_("Unable to connect to system bus!\n"));
         ret = EIO;
         goto done;
     }
@@ -114,7 +114,7 @@ static errno_t get_ifp_user(const char *username)
         goto done;
     }
 
-    fprintf(stdout, _("SSSD InfoPipe user lookup result:\n"));
+    ERROR(_("SSSD InfoPipe user lookup result:\n"));
     PRINT_IFP_PROPERTY(user, name, "s");
     PRINT_IFP_PROPERTY(user, uidNumber, PRIu32);
     PRINT_IFP_PROPERTY(user, gidNumber, PRIu32);
@@ -134,12 +134,12 @@ static errno_t get_ifp_user(const char *username)
         while ((extra_entry = extra_iter->next(extra_iter)) != NULL) {
             extra_values = extra_entry->value.ptr;
             for(extra_idx = 0; extra_values[extra_idx] != NULL; ++extra_idx) {
-                fprintf(stdout, " - %s: %s\n", extra_entry->key.str, extra_values[extra_idx]);
+                ERROR(" - %s: %s\n", extra_entry->key.str, extra_values[extra_idx]);
             }
         }
     }
 
-    fprintf(stdout, "\n");
+    PRINT("\n");
 
     ret = EOK;
 
@@ -164,14 +164,14 @@ static int sss_getpwnam_check(const char *user)
 
     dl_handle = dlopen("libnss_sss.so.2", RTLD_NOW);
     if (dl_handle == NULL) {
-        fprintf(stderr, _("dlopen failed with [%s].\n"), dlerror());
+        ERROR(_("dlopen failed with [%s].\n"), dlerror());
         ret = EIO;
         goto done;
     }
 
     sss_getpwnam_r = dlsym(dl_handle, "_nss_sss_getpwnam_r");
     if (sss_getpwnam_r == NULL) {
-        fprintf(stderr, _("dlsym failed with [%s].\n"), dlerror());
+        ERROR(_("dlsym failed with [%s].\n"), dlerror());
         ret = EIO;
         goto done;
     }
@@ -179,25 +179,25 @@ static int sss_getpwnam_check(const char *user)
     buflen = DEFAULT_BUFSIZE;
     buffer = malloc(buflen);
     if (buffer == NULL) {
-        fprintf(stderr, _("malloc failed.\n"));
+        ERROR(_("malloc failed.\n"));
         ret = ENOMEM;
         goto done;
     }
 
     status = sss_getpwnam_r(user, &pwd, buffer, buflen, &nss_errno);
     if (status != NSS_STATUS_SUCCESS) {
-        fprintf(stderr, _("sss_getpwnam_r failed with [%d].\n"), status);
+        ERROR(_("sss_getpwnam_r failed with [%d].\n"), status);
         ret = EIO;
         goto done;
     }
 
-    fprintf(stdout, _("SSSD nss user lookup result:\n"));
-    fprintf(stdout, _(" - user name: %s\n"), pwd.pw_name);
-    fprintf(stdout, _(" - user id: %d\n"), pwd.pw_uid);
-    fprintf(stdout, _(" - group id: %d\n"), pwd.pw_gid);
-    fprintf(stdout, _(" - gecos: %s\n"), pwd.pw_gecos);
-    fprintf(stdout, _(" - home directory: %s\n"), pwd.pw_dir);
-    fprintf(stdout, _(" - shell: %s\n\n"), pwd.pw_shell);
+    PRINT(_("SSSD nss user lookup result:\n"));
+    PRINT(_(" - user name: %s\n"), pwd.pw_name);
+    PRINT(_(" - user id: %d\n"), pwd.pw_uid);
+    PRINT(_(" - group id: %d\n"), pwd.pw_gid);
+    PRINT(_(" - gecos: %s\n"), pwd.pw_gecos);
+    PRINT(_(" - home directory: %s\n"), pwd.pw_dir);
+    PRINT(_(" - shell: %s\n\n"), pwd.pw_shell);
 
     ret = 0;
 
@@ -244,73 +244,71 @@ errno_t sssctl_user_checks(struct sss_cmdline *cmdline,
         return ret;
     }
 
-    fprintf(stdout, _("user: %s\naction: %s\nservice: %s\n\n"),
+    PRINT(_("user: %s\naction: %s\nservice: %s\n\n"),
                     user, action, service);
 
     if (*user != '\0') {
         ret = sss_getpwnam_check(user);
         if (ret != 0) {
-            fprintf(stderr, _("User name lookup with [%s] failed.\n"), user);
+            ERROR(_("User name lookup with [%s] failed.\n"), user);
         }
 
         ret = get_ifp_user(user);
         if (ret != 0) {
-            fprintf(stderr, _("InfoPipe User lookup with [%s] failed.\n"),
-                            user);
+            ERROR(_("InfoPipe User lookup with [%s] failed.\n"), user);
         }
     }
 
     ret = pam_start(service, user, &conv, &pamh);
     if (ret != PAM_SUCCESS) {
-        fprintf(stderr, _("pam_start failed: %s\n"), pam_strerror(pamh, ret));
+        ERROR(_("pam_start failed: %s\n"), pam_strerror(pamh, ret));
         return 1;
     }
 
     if ( strncmp(action, "auth", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_authenticate\n\n"));
+        PRINT(_("testing pam_authenticate\n\n"));
         ret = pam_authenticate(pamh, 0);
         pret = pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
         if (pret != PAM_SUCCESS) {
-            fprintf(stderr, _("pam_get_item failed: %s\n"), pam_strerror(pamh,
-                                                                         pret));
+            ERROR(_("pam_get_item failed: %s\n"), pam_strerror(pamh, pret));
             pam_user = "- not available -";
         }
-        fprintf(stderr, _("pam_authenticate for user [%s]: %s\n\n"), pam_user,
+        ERROR(_("pam_authenticate for user [%s]: %s\n\n"), pam_user,
                                                        pam_strerror(pamh, ret));
     } else if ( strncmp(action, "chau", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_chauthtok\n\n"));
+        PRINT(_("testing pam_chauthtok\n\n"));
         ret = pam_chauthtok(pamh, 0);
-        fprintf(stderr, _("pam_chauthtok: %s\n\n"), pam_strerror(pamh, ret));
+        ERROR(_("pam_chauthtok: %s\n\n"), pam_strerror(pamh, ret));
     } else if ( strncmp(action, "acct", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_acct_mgmt\n\n"));
+        PRINT(_("testing pam_acct_mgmt\n\n"));
         ret = pam_acct_mgmt(pamh, 0);
-        fprintf(stderr, _("pam_acct_mgmt: %s\n\n"), pam_strerror(pamh, ret));
+        ERROR(_("pam_acct_mgmt: %s\n\n"), pam_strerror(pamh, ret));
     } else if ( strncmp(action, "setc", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_setcred\n\n"));
+        PRINT(_("testing pam_setcred\n\n"));
         ret = pam_setcred(pamh, 0);
-        fprintf(stderr, _("pam_setcred: [%s]\n\n"), pam_strerror(pamh, ret));
+        ERROR(_("pam_setcred: [%s]\n\n"), pam_strerror(pamh, ret));
     } else if ( strncmp(action, "open", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_open_session\n\n"));
+        PRINT(_("testing pam_open_session\n\n"));
         ret = pam_open_session(pamh, 0);
-        fprintf(stderr, _("pam_open_session: %s\n\n"), pam_strerror(pamh, ret));
+        ERROR(_("pam_open_session: %s\n\n"), pam_strerror(pamh, ret));
     } else if ( strncmp(action, "clos", 4)== 0 ) {
-        fprintf(stdout, _("testing pam_close_session\n\n"));
+        PRINT(_("testing pam_close_session\n\n"));
         ret = pam_close_session(pamh, 0);
-        fprintf(stderr, _("pam_close_session: %s\n\n"),
+        ERROR(_("pam_close_session: %s\n\n"),
                         pam_strerror(pamh, ret));
     } else {
-        fprintf(stderr, _("unknown action\n"));
+        ERROR(_("unknown action\n"));
     }
 
-    fprintf(stderr, _("PAM Environment:\n"));
+    ERROR(_("PAM Environment:\n"));
     pam_env = pam_getenvlist(pamh);
     if (pam_env != NULL && pam_env[0] != NULL) {
         for (c = 0; pam_env[c] != NULL; c++) {
-            fprintf(stderr, " - %s\n", pam_env[c]);
+            ERROR(" - %s\n", pam_env[c]);
             free(pam_env[c]);
         }
     } else {
-        fprintf(stderr, _(" - no env -\n"));
+        ERROR(_(" - no env -\n"));
     }
     free(pam_env);
 
diff --git a/src/tools/sssd_check_socket_activated_responders.c b/src/tools/sssd_check_socket_activated_responders.c
index fb9df39091..5aa2add1ba 100644
--- a/src/tools/sssd_check_socket_activated_responders.c
+++ b/src/tools/sssd_check_socket_activated_responders.c
@@ -162,8 +162,7 @@ int main(int argc, const char *argv[])
     while ((opt = poptGetNextOpt(pc)) != -1) {
         switch (opt) {
         default:
-            fprintf(stderr, "\nInvalid option %s: %s\n\n",
-                    poptBadOption(pc, 0), poptStrerror(opt));
+            ERROR("\nInvalid option %s: %s\n\n", poptBadOption(pc, 0), poptStrerror(opt));
             poptPrintUsage(pc, stderr, 0);
             ret = 1;
             goto done;
diff --git a/src/tools/tools_util.c b/src/tools/tools_util.c
index 146f78a890..a74da3be11 100644
--- a/src/tools/tools_util.c
+++ b/src/tools/tools_util.c
@@ -78,11 +78,11 @@ void usage(poptContext pc, const char *error)
     if (error) {
         lentmp = strlen(error);
         if ((lentmp > 0) && (error[lentmp - 1] != '\n')) {
-            fprintf(stderr, "%s\n", error);
+            ERROR("%s\n", error);
             return;
         }
 
-        fprintf(stderr, "%s", error);
+        ERROR("%s", error);
     }
 }
 
_______________________________________________
sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org
To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org

Reply via email to