aboutsummaryrefslogtreecommitdiff
path: root/pam_sql/pam_mysql.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2008-03-19 09:50:00 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2008-03-19 09:50:00 +0000
commit06aaf68ec3764ec42b6226f27e294bb9f7b7fed6 (patch)
tree063e13431f9ac790d983c4bea91ec94457986c1b /pam_sql/pam_mysql.c
parent80aafa9dcf019a68ce2a9958f4ec09026c44f2dc (diff)
downloadpam-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.c22
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

Return to:

Send suggestions and report system problems to the System administrator.