diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/util/util.h | 8 | ||||
-rw-r--r-- | src/util/util_errors.c | 41 | ||||
-rw-r--r-- | src/util/util_errors.h | 75 |
3 files changed, 117 insertions, 7 deletions
diff --git a/src/util/util.h b/src/util/util.h index 7026f0b93..9657826e2 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -44,11 +44,7 @@ #include <dhash.h> #include "util/atomic_io.h" - -#ifndef HAVE_ERRNO_T -#define HAVE_ERRNO_T -typedef int errno_t; -#endif +#include "util/util_errors.h" #define _(STRING) gettext (STRING) @@ -221,8 +217,6 @@ errno_t set_debug_file_from_fd(const int fd); #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) -#define EOK 0 - #define SSSD_MAIN_OPTS SSSD_DEBUG_OPTS #define FLAGS_NONE 0x0000 diff --git a/src/util/util_errors.c b/src/util/util_errors.c new file mode 100644 index 000000000..92dced3c5 --- /dev/null +++ b/src/util/util_errors.c @@ -0,0 +1,41 @@ +/* + Copyright (C) 2012 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Authors: + Simo Sorce <ssorce@redhat.com> +*/ + +#include "util/util.h" + +struct err_string { + const char *msg; +}; + +struct err_string error_to_str[] = { + { "Invalid Error" }, /* ERR_INVALID */ + { "Internal Error" }, /* ERR_INTERNAL */ +}; + + +const char *sss_strerror(errno_t error) +{ + if (IS_SSSD_ERROR(error)) { + return error_to_str[SSSD_ERR_IDX(error)].msg; + } + + return strerror(error); +} + diff --git a/src/util/util_errors.h b/src/util/util_errors.h new file mode 100644 index 000000000..eb0df77e6 --- /dev/null +++ b/src/util/util_errors.h @@ -0,0 +1,75 @@ +/* + Copyright (C) 2012 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Authors: + Simo Sorce <ssorce@redhat.com> +*/ + +#ifndef __SSSD_UTIL_ERRORS_H__ +#define __SSSD_UTIL_ERRORS_H__ + +#ifndef HAVE_ERRNO_T +#define HAVE_ERRNO_T +typedef int errno_t; +#endif + +/* + * We define a specific number space so that we do not overlap with other + * generic errors returned by various libraries. This will make it easy + * to have functions that double check that what was returned was a SSSD + * specific error where it matters. For example we may want to ensure some + * particularly sensitive paths only return SSSD sepcific errors as that + * will insure all error conditions have been explicitly dealt with, + * and are not the result of assigning the wrong return result. + * + * Basic system errno errors can still be used, but when an error condition + * does not properly map to a system error we should use a SSSD specific one + */ + +#define ERR_BASE 0x555D0000 +#define ERR_MASK 0x0000FFFF + +/* never use ERR_INVALID, it is used for catching and returning + * information on invalid error numbers */ +/* never use ERR_LAST, this represent the maximum error value available + * and is used to validate error codes */ +enum sssd_errors { + ERR_INVALID = ERR_BASE + 0, + ERR_INTERNAL, + ERR_LAST /* ALWAYS LAST */ +}; + +#define SSSD_ERR_IDX(err) ((err) & ERR_MASK) +#define IS_SSSD_ERROR(err) \ + ((((err) & ERR_BASE) == ERR_BASE) && \ + SSSD_ERR_IDX(err) < ERR_LAST) + +#define ERR_OK 0 +/* Backwards compat */ +#ifndef EOK +#define EOK ERR_OK +#endif + +/** + * @brief return a string descriing the error number like strerror() + * + * @param error An errno_t number, can be a SSSD error or a system error + * + * @return A statically allocated string. + */ +const char *sss_strerror(errno_t error); + +#endif /* __SSSD_UTIL_ERRORS_H__ */ |