diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2008-03-19 09:50:00 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2008-03-19 09:50:00 +0000 |
commit | 06aaf68ec3764ec42b6226f27e294bb9f7b7fed6 (patch) | |
tree | 063e13431f9ac790d983c4bea91ec94457986c1b /pam_sql/pam_mysql.c | |
parent | 80aafa9dcf019a68ce2a9958f4ec09026c44f2dc (diff) | |
download | pam-modules-06aaf68ec3764ec42b6226f27e294bb9f7b7fed6.tar.gz pam-modules-06aaf68ec3764ec42b6226f27e294bb9f7b7fed6.tar.bz2 |
* configure.ac: Check for pam libraries and header files.
* pam_sql/pam_mysql.c (mysql_setenv): Protect by #ifdef
HAVE_PAM_MISC_SETENV. Prevent coredumps on NULL values.
* pam_sql/pam_pgsql.c (pgsql_setenv): Likewise.
* pam_sql/Makefile.am (pam_mysql_la_LDADD,pam_pgsql_la_LDADD): Add
@PAM_MISC@.
* pam_sql/pam_sql.c (read_config): Read lines of arbitrary length.
git-svn-id: file:///svnroot/pam-modules/trunk@90 56984be4-0537-0410-a56c-fcb268c96130
Diffstat (limited to 'pam_sql/pam_mysql.c')
-rw-r--r-- | pam_sql/pam_mysql.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/pam_sql/pam_mysql.c b/pam_sql/pam_mysql.c index 00478ca..2c0d578 100644 --- a/pam_sql/pam_mysql.c +++ b/pam_sql/pam_mysql.c @@ -304,10 +304,8 @@ mysql_do_query(MYSQL *mysql, const char *query) static int mysql_setenv(pam_handle_t *pamh, MYSQL *mysql, const char *query) { +#ifdef HAVE_PAM_MISC_SETENV MYSQL_RES *result; - MYSQL_ROW row; - MYSQL_FIELD *fields; - size_t nf, i; DEBUG(10,("Executing %s", query)); if (mysql_query(mysql, query)) { @@ -319,13 +317,21 @@ mysql_setenv(pam_handle_t *pamh, MYSQL *mysql, const char *query) mysql_error(mysql)); return PAM_SERVICE_ERR; } - row = mysql_fetch_row(result); - fields = mysql_fetch_fields(result); - nf = mysql_num_fields(result); - for (i = 0; i < nf; i++) - pam_misc_setenv(pamh, fields[i].name, row[i], 0); + if (mysql_num_rows(result)) { + MYSQL_ROW row = mysql_fetch_row(result); + MYSQL_FIELD *fields = mysql_fetch_fields(result); + size_t i, nf = mysql_num_fields(result); + for (i = 0; i < nf; i++) + if (row[i]) + pam_misc_setenv(pamh, fields[i].name, + row[i], 0); + } mysql_free_result(result); return PAM_SUCCESS; +#else + _pam_log(LOG_ERR, "MySQL: PAM setenv is not available."); + return PAM_SERVICE_ERR; +#endif } static int |