return t_strdup_until(path, p);
}
-struct passwd_user *
-db_passwd_file_lookup(struct db_passwd_file *db, struct auth_request *request,
- const char *username_format)
+int db_passwd_file_lookup(struct db_passwd_file *db,
+ struct auth_request *request,
+ const char *username_format,
+ struct passwd_user **user_r)
{
struct passwd_file *pw;
- struct passwd_user *pu;
string_t *username, *dest;
if (!db->vars)
if (passwd_file_sync(request, pw) < 0) {
/* pw may be freed now */
- return NULL;
+ return -1;
}
username = t_str_new(256);
"lookup: user=%s file=%s",
str_c(username), pw->path);
- pu = hash_table_lookup(pw->users, str_c(username));
- if (pu == NULL)
- auth_request_log_unknown_user(request, AUTH_SUBSYS_DB);
- return pu;
+ *user_r = hash_table_lookup(pw->users, str_c(username));
+ if (*user_r == NULL) {
+ auth_request_log_unknown_user(request, AUTH_SUBSYS_DB);
+ return 0;
+ }
+ return 1;
}
#endif
unsigned int debug:1;
};
-struct passwd_user *
-db_passwd_file_lookup(struct db_passwd_file *db, struct auth_request *request,
- const char *username_format);
+int db_passwd_file_lookup(struct db_passwd_file *db,
+ struct auth_request *request,
+ const char *username_format,
+ struct passwd_user **user_r);
struct db_passwd_file *
db_passwd_file_init(const char *path, bool userdb, bool debug);
const char *scheme, *crypted_pass;
int ret;
- pu = db_passwd_file_lookup(module->pwf, request,
- module->username_format);
- if (pu == NULL) {
- callback(PASSDB_RESULT_USER_UNKNOWN, request);
+ ret = db_passwd_file_lookup(module->pwf, request,
+ module->username_format, &pu);
+ if (ret <= 0) {
+ callback(ret < 0 ? PASSDB_RESULT_INTERNAL_FAILURE :
+ PASSDB_RESULT_USER_UNKNOWN, request);
return;
}
(struct passwd_file_passdb_module *)_module;
struct passwd_user *pu;
const char *crypted_pass, *scheme;
+ int ret;
- pu = db_passwd_file_lookup(module->pwf, request,
- module->username_format);
- if (pu == NULL) {
- callback(PASSDB_RESULT_USER_UNKNOWN, NULL, 0, request);
+ ret = db_passwd_file_lookup(module->pwf, request,
+ module->username_format, &pu);
+ if (ret <= 0) {
+ callback(ret < 0 ? PASSDB_RESULT_INTERNAL_FAILURE :
+ PASSDB_RESULT_USER_UNKNOWN, NULL, 0, request);
return;
}
string_t *str;
const char *key, *value;
char **p;
+ int ret;
- pu = db_passwd_file_lookup(module->pwf, auth_request,
- module->username_format);
- if (pu == NULL || pu->uid == 0) {
+ ret = db_passwd_file_lookup(module->pwf, auth_request,
+ module->username_format, &pu);
+ if (ret <= 0 || pu->uid == 0) {
callback(USERDB_RESULT_USER_UNKNOWN, auth_request);
return;
}