changeset 14640:f74557336910

auth: if passwd-file isn't the only userdb, don't complain about missing userdb fields
author Timo Sirainen <tss@iki.fi>
date Tue, 31 Jul 2012 20:59:22 +0300
parents fac6b994e869
children 817b69b2b21f
files src/auth/db-passwd-file.c src/auth/db-passwd-file.h
diffstat 2 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/db-passwd-file.c	Tue Jul 31 18:34:53 2012 +0300
+++ b/src/auth/db-passwd-file.c	Tue Jul 31 20:59:22 2012 +0300
@@ -7,6 +7,7 @@
 #include "userdb.h"
 #include "db-passwd-file.h"
 
+#include "array.h"
 #include "buffer.h"
 #include "istream.h"
 #include "hash.h"
@@ -90,7 +91,7 @@
 	}
 
 	if (*args == NULL) {
-		if (pw->db->userdb) {
+		if (pw->db->userdb_warn_missing) {
 			i_error("passwd-file %s: User %s is missing "
 				"userdb info", pw->path, username);
 		}
@@ -290,6 +291,15 @@
 	return NULL;
 }
 
+static void db_passwd_file_set_userdb(struct db_passwd_file *db)
+{
+	db->userdb = TRUE;
+	/* warn about missing userdb fields only when there aren't any other
+	   userdbs. */
+	db->userdb_warn_missing =
+		array_count(&global_auth_settings->userdbs) == 1;
+}
+
 struct db_passwd_file *
 db_passwd_file_init(const char *path, bool userdb, bool debug)
 {
@@ -300,13 +310,15 @@
 	db = db_passwd_file_find(path);
 	if (db != NULL) {
 		db->refcount++;
-		db->userdb = TRUE;
+		if (userdb)
+			db_passwd_file_set_userdb(db);
 		return db;
 	}
 
 	db = i_new(struct db_passwd_file, 1);
 	db->refcount = 1;
-	db->userdb = userdb;
+	if (userdb)
+		db_passwd_file_set_userdb(db);
 	db->debug = debug;
 
 	for (p = path; *p != '\0'; p++) {
--- a/src/auth/db-passwd-file.h	Tue Jul 31 18:34:53 2012 +0300
+++ b/src/auth/db-passwd-file.h	Tue Jul 31 20:59:22 2012 +0300
@@ -37,6 +37,7 @@
 
 	unsigned int vars:1;
 	unsigned int userdb:1;
+	unsigned int userdb_warn_missing:1;
 	unsigned int debug:1;
 };