From 6fc3d82aae15d5e80e70dbb3adda1c39ef3b62f7 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 17 Dec 2014 23:26:36 -0500 Subject: Use log_log->SD universally --- nslcd/cfg.c | 1 - nslcd/hackers.c | 1 - nslcd/hackers_parse.c | 61 +++++++++++++++++++++++++-------------------------- nslcd/hackers_parse.h | 14 +++++++++++- nslcd/hackers_watch.c | 24 ++++++++------------ nslcd/log.c | 4 ++-- nslcd/nsswitch.c | 1 - 7 files changed, 54 insertions(+), 52 deletions(-) diff --git a/nslcd/cfg.c b/nslcd/cfg.c index 5b42272..14819ab 100644 --- a/nslcd/cfg.c +++ b/nslcd/cfg.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #ifdef HAVE_GSSAPI_H diff --git a/nslcd/hackers.c b/nslcd/hackers.c index f471266..f5032ce 100644 --- a/nslcd/hackers.c +++ b/nslcd/hackers.c @@ -1,6 +1,5 @@ #include #include -#include #include #include #include "hackers_watch.h" diff --git a/nslcd/hackers_parse.c b/nslcd/hackers_parse.c index 0c9b6f8..0a699cf 100644 --- a/nslcd/hackers_parse.c +++ b/nslcd/hackers_parse.c @@ -1,3 +1,4 @@ +/* -*- tab-width: 4; c-basic-offset: 4 -*- */ /* hackers_parse.c - load user data from hackers.git * * Copyright (C) 2014 Luke Shumaker @@ -17,13 +18,11 @@ */ #define _GNU_SOURCE +#include #include #include #include -#include -#include - /* These three are just for name2gid, which is surprisingly * complicated. */ #include @@ -35,33 +34,23 @@ #define DEFAULT_PASSWORD "!" -#define ASSERT(expr) \ - do { \ - errno = 0; \ - if (!(expr)) { \ - error(0, errno, "%s:%d: ASSERT(%s) failed", \ - __FILE__, __LINE__, #expr); \ - goto error; \ - } \ - } while(0) - /* Get a string value from a YAML scalar node */ -#define STR_VALUE(node) \ - (__extension__ ({ \ - ASSERT((node)->type == YAML_SCALAR_NODE); \ - ((char*)(node)->data.scalar.value); \ - })) +#define STR_VALUE(node) \ + (__extension__ ({ \ + ASSERT((node)->type == YAML_SCALAR_NODE); \ + ((char*)(node)->data.scalar.value); \ + })) /* Bitmask flags for the completion of the fields in * 'struct passwd' (which is defined in ) */ -#define PW_NAME (1 << 0) -#define PW_PASSWD (1 << 1) -#define PW_UID (1 << 2) -#define PW_GID (1 << 3) -#define PW_GECOS (1 << 4) -#define PW_DIR (1 << 5) -#define PW_SHELL (1 << 6) -#define PW_ALL ((1 << 7) - 1) +#define PW_NAME (1 << 0) +#define PW_PASSWD (1 << 1) +#define PW_UID (1 << 2) +#define PW_GID (1 << 3) +#define PW_GECOS (1 << 4) +#define PW_DIR (1 << 5) +#define PW_SHELL (1 << 6) +#define PW_ALL ((1 << 7) - 1) /* Returns GID_INVALID on error */ static @@ -140,7 +129,7 @@ load_user_password(struct passwd *user) { user->pw_passwd = line; return 0; error: - error(0, errno, "unexpected error in %s", __func__); + log_log(LOG_ERR, "unexpected error in %s", __func__); nopassword: free(filename); free(line); @@ -161,7 +150,10 @@ load_user_yaml(const char *filename, struct passwd *user) { yaml_parser_t yaml_parser; ZERO(yaml_parser); yaml_document_t yaml_document; ZERO(yaml_document); - ASSERT((user->pw_uid = filename2uid(filename)) != UID_INVALID); + if ((user->pw_uid = filename2uid(filename)) == UID_INVALID) { + log_log(LOG_NOTICE, "invalid user filename: %s", filename); + goto error; + } flags |= PW_UID; ASSERT((yaml_file = fopen(filename, "r")) != NULL); @@ -201,7 +193,11 @@ load_user_yaml(const char *filename, struct passwd *user) { /* primary group */ /* TODO */ char *grp_name = "users"/*STR_VALUE(item)*/; - ASSERT((user->pw_gid = name2gid(grp_name)) != GID_INVALID); + if ((user->pw_gid = name2gid(grp_name)) == GID_INVALID) { + log_log(LOG_NOTICE, "unrecognized group name: %s", + grp_name); + continue; + } flags |= PW_GID; } else { /* secondary group */ @@ -215,11 +211,14 @@ load_user_yaml(const char *filename, struct passwd *user) { goto error; flags |= PW_PASSWD; } - ASSERT(flags == PW_ALL); + if (flags != PW_ALL) { + log_log(LOG_NOTICE, "user file was incomplete, ignoring: %s", filename); + goto error; + } ret = 0; goto end; error: - error(0, errno, "error when parsing %s", filename); + log_log(LOG_INFO, "ignoring file: %s", filename); PASSWD_FREE(*user); user->pw_uid = UID_INVALID; end: diff --git a/nslcd/hackers_parse.h b/nslcd/hackers_parse.h index 97c779b..9cbb2a8 100644 --- a/nslcd/hackers_parse.h +++ b/nslcd/hackers_parse.h @@ -4,6 +4,18 @@ #include /* for memset(3) */ #include /* for free(3) */ #include /* for 'struct passwd' */ +#include /* for 'errno' */ +#include "log.h" + +#define ASSERT(expr) \ + do { \ + errno = 0; \ + if (!(expr)) { \ + log_log(LOG_ERR, "%s:%d: ASSERT(%s) failed", \ + __FILE__, __LINE__, #expr); \ + goto error; \ + } \ + } while(0) #define MALLOC(size) REALLOC(NULL, size) @@ -12,7 +24,7 @@ errno = 0; \ void *ret = realloc(ptr, size); \ if (ret == (ptr)) { \ - error(0, errno, "could not (re)allocate memory"); \ + log_log(LOG_ERR, "realloc() failed"); \ goto error; \ }; \ ret; \ diff --git a/nslcd/hackers_watch.c b/nslcd/hackers_watch.c index e2222fc..7cb90d7 100644 --- a/nslcd/hackers_watch.c +++ b/nslcd/hackers_watch.c @@ -19,7 +19,6 @@ #include #include -#include #include /* for asprintf(3) */ #include /* for chdir(3) */ @@ -35,25 +34,16 @@ #define EVENT_CHILD_MOD (IN_CLOSE_WRITE | IN_MOVED_TO) #define EVENT_CHILD_ANY (EVENT_CHILD_ADD | EVENT_CHILD_DEL | EVENT_CHILD_MOD) -#define ASSERT(expr) \ - do { \ - errno = 0; \ - if (!(expr)) { \ - error(0, errno, "%s:%d: ASSERT(%s) failed", \ - __FILE__, __LINE__, #expr); \ - goto error; \ - } \ - } while(0) - #define WATCH_HOMEDIR(session, i) \ do { \ + errno = 0; \ session->in_user_wds[i] = \ inotify_add_watch(session->in_fd, \ session->users[i].pw_dir, \ EVENT_CHILD_ANY | IN_MOVE_SELF); \ if (session->in_user_wds[i] < 0) { \ - error(0, errno, "could not watch: %s", \ - session->users[i].pw_dir); \ + log_log(LOG_INFO, "could not watch: %s", \ + session->users[i].pw_dir); \ /* don't goto error, it OK here */ \ } \ } while(0) @@ -64,7 +54,8 @@ hackers_session_allocate() { struct session *sess; sess = MALLOC(sizeof(struct session)); if ((err = pthread_rwlock_init(&(sess->lock), NULL)) != 0) { - error(0, err, "could not initialize session rwlock"); + errno = err; + log_log(LOG_ERR, "could not initialize session rwlock"); goto error; } sess->cnt = 0; @@ -118,7 +109,10 @@ hackers_session_close(struct session *sess) { free(sess->yamldir); sess->yamldir = NULL; free(sess->in_user_wds); sess->in_user_wds = NULL; - close(sess->in_fd); sess->in_fd = -1; + if (sess->in_fd >= 0) { + close(sess->in_fd); + sess->in_fd = -1; + } sess->in_wd_home = -1; sess->in_wd_yaml = -1; } diff --git a/nslcd/log.c b/nslcd/log.c index b0e205d..a24c04d 100644 --- a/nslcd/log.c +++ b/nslcd/log.c @@ -108,7 +108,7 @@ void log_newsession(void) sessionid = (char *)malloc(7); if (sessionid == NULL) { - fprintf(stderr, "malloc() failed: %s", strerror(errno)); + fprintf(stderr, SD_ERR "malloc() failed: %s", strerror(errno)); return; /* silently fail */ } #ifndef TLS @@ -137,7 +137,7 @@ void log_setrequest(const char *format, ...) requestid = (char *)malloc(MAX_REQUESTID_LENGTH); if (requestid == NULL) { - fprintf(stderr, "malloc() failed: %s", strerror(errno)); + fprintf(stderr, SD_ERR "malloc() failed: %s", strerror(errno)); return; /* silently fail */ } #ifndef TLS diff --git a/nslcd/nsswitch.c b/nslcd/nsswitch.c index 526d773..7f08c00 100644 --- a/nslcd/nsswitch.c +++ b/nslcd/nsswitch.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include -- cgit v1.2.3