summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2014-12-17 23:26:36 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2014-12-17 23:26:36 -0500
commit6fc3d82aae15d5e80e70dbb3adda1c39ef3b62f7 (patch)
treea4f390fa4e5e48e01e7cdc0b2840d9a6ea49718b
parent051ee4061b1f605b4b95a868c8c4d84b5dfd09b8 (diff)
Use log_log->SD universally
-rw-r--r--nslcd/cfg.c1
-rw-r--r--nslcd/hackers.c1
-rw-r--r--nslcd/hackers_parse.c61
-rw-r--r--nslcd/hackers_parse.h14
-rw-r--r--nslcd/hackers_watch.c24
-rw-r--r--nslcd/log.c4
-rw-r--r--nslcd/nsswitch.c1
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 <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
-#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#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 <stdbool.h>
#include <string.h>
-#include <errno.h>
#include <stdlib.h>
#include <pthread.h>
#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 <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <yaml.h>
-#include <error.h>
-#include <errno.h>
-
/* These three are just for name2gid, which is surprisingly
* complicated. */
#include <errno.h>
@@ -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 <pwd.h>) */
-#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 <string.h> /* for memset(3) */
#include <stdlib.h> /* for free(3) */
#include <pwd.h> /* for 'struct passwd' */
+#include <errno.h> /* 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 <glob.h>
#include <errno.h>
-#include <error.h>
#include <stdio.h> /* for asprintf(3) */
#include <unistd.h> /* 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 <stdio.h>
#include <string.h>
#include <ctype.h>
-#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>