[linux-pam] 2011-05-30 Thorsten Kukuk <kukuk@thkukuk.de>
by kukuk
commit a1950248ee3fb08374b5733afc3d9f123634319b
Author: Thorsten Kukuk <kukuk(a)thkukuk.de>
Date: Mon May 30 19:36:56 2011 +0200
2011-05-30 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_timestamp/pam_timestamp.c (main): Remove unsused
variable pretval.
* modules/pam_stress/pam_stress.c (converse): **message is const.
(stress_get_password): pmsg is const.
(pam_sm_chauthtok): Likewise.
* libpam/pam_item.c (pam_get_user): Make pmsg const and remove
casts.
ChangeLog | 11 +++++++++++
libpam/pam_item.c | 6 +++---
modules/pam_stress/pam_stress.c | 11 ++++++-----
modules/pam_timestamp/pam_timestamp.c | 3 +--
4 files changed, 21 insertions(+), 10 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 986a78f..c60a143 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2011-05-30 Thorsten Kukuk <kukuk(a)thkukuk.de>
+ * modules/pam_timestamp/pam_timestamp.c (main): Remove unsused
+ variable pretval.
+
+ * modules/pam_stress/pam_stress.c (converse): **message is const.
+ (stress_get_password): pmsg is const.
+ (pam_sm_chauthtok): Likewise.
+ * libpam/pam_item.c (pam_get_user): Make pmsg const and remove
+ casts.
+
+2011-05-30 Thorsten Kukuk <kukuk(a)thkukuk.de>
+
* modules/pam_env/pam_env.c (_pam_parse): Implement debug option.
Based on patch by Tomas Mraz.
diff --git a/libpam/pam_item.c b/libpam/pam_item.c
index ed478a4..00e00c2 100644
--- a/libpam/pam_item.c
+++ b/libpam/pam_item.c
@@ -274,7 +274,8 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
{
const char *use_prompt;
int retval;
- struct pam_message msg,*pmsg;
+ struct pam_message msg;
+ const struct pam_message *pmsg;
struct pam_response *resp;
D(("called."));
@@ -340,8 +341,7 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
resp = NULL;
retval = pamh->pam_conversation->
- conv(1, (const struct pam_message **) &pmsg, &resp,
- pamh->pam_conversation->appdata_ptr);
+ conv(1, &pmsg, &resp, pamh->pam_conversation->appdata_ptr);
if (retval == PAM_CONV_AGAIN) {
/* conversation function is waiting for an event - save state */
diff --git a/modules/pam_stress/pam_stress.c b/modules/pam_stress/pam_stress.c
index 01587fe..b75a597 100644
--- a/modules/pam_stress/pam_stress.c
+++ b/modules/pam_stress/pam_stress.c
@@ -116,7 +116,7 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv)
}
static int converse(pam_handle_t *pamh, int nargs
- , struct pam_message **message
+ , const struct pam_message **message
, struct pam_response **response)
{
int retval;
@@ -126,8 +126,7 @@ static int converse(pam_handle_t *pamh, int nargs
retval = pam_get_item(pamh,PAM_CONV,&void_conv);
conv = void_conv;
if (retval == PAM_SUCCESS && conv) {
- retval = conv->conv(nargs, (const struct pam_message **) message
- , response, conv->appdata_ptr);
+ retval = conv->conv(nargs, message, response, conv->appdata_ptr);
if (retval != PAM_SUCCESS) {
pam_syslog(pamh, LOG_ERR, "converse returned %d: %s",
retval, pam_strerror(pamh, retval));
@@ -159,7 +158,8 @@ static int stress_get_password(pam_handle_t *pamh, int flags
pam_syslog(pamh, LOG_WARNING, "no forwarded password");
return PAM_PERM_DENIED;
} else { /* we will have to get one */
- struct pam_message msg[1],*pmsg[1];
+ struct pam_message msg[1];
+ const struct pam_message *pmsg[1];
struct pam_response *resp;
int retval;
@@ -412,7 +412,8 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
return PAM_SUCCESS;
} else if (flags & PAM_UPDATE_AUTHTOK) { /* second call */
- struct pam_message msg[3],*pmsg[3];
+ struct pam_message msg[3];
+ const struct pam_message *pmsg[3];
struct pam_response *resp;
const void *text;
char *txt=NULL;
diff --git a/modules/pam_timestamp/pam_timestamp.c b/modules/pam_timestamp/pam_timestamp.c
index 2687676..7bcf3d1 100644
--- a/modules/pam_timestamp/pam_timestamp.c
+++ b/modules/pam_timestamp/pam_timestamp.c
@@ -684,7 +684,7 @@ struct pam_module _pam_timestamp_modstruct = {
int
main(int argc, char **argv)
{
- int i, pretval = -1, retval = 0, dflag = 0, kflag = 0;
+ int i, retval = 0, dflag = 0, kflag = 0;
const char *target_user = NULL, *user = NULL, *tty = NULL;
struct passwd *pwd;
struct timeval tv;
@@ -826,7 +826,6 @@ main(int argc, char **argv)
select(STDOUT_FILENO + 1,
NULL, NULL, &write_fds,
&tv);
- pretval = retval;
retval = 0;
}
} while (dflag > 0);
12 years, 11 months
[linux-pam] 2011-05-30 Thorsten Kukuk <kukuk@thkukuk.de>
by kukuk
commit 9ac26f8f0a23a396e3cec5c1949fb2f90a097643
Author: Thorsten Kukuk <kukuk(a)thkukuk.de>
Date: Mon May 30 11:12:30 2011 +0200
2011-05-30 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_env/pam_env.c (_pam_parse): Implement debug option.
Based on patch by Tomas Mraz.
ChangeLog | 5 +++++
modules/pam_env/pam_env.c | 31 ++++++++++++++++++++-----------
2 files changed, 25 insertions(+), 11 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b90a2e6..986a78f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-30 Thorsten Kukuk <kukuk(a)thkukuk.de>
+
+ * modules/pam_env/pam_env.c (_pam_parse): Implement debug option.
+ Based on patch by Tomas Mraz.
+
2011-05-24 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_listfile/pam_listfile.c (pam_sm_authenticate): quiet
diff --git a/modules/pam_env/pam_env.c b/modules/pam_env/pam_env.c
index 8ac8ed3..865fbaf 100644
--- a/modules/pam_env/pam_env.c
+++ b/modules/pam_env/pam_env.c
@@ -68,8 +68,8 @@ static int _check_var(pam_handle_t *, VAR *); /* This is the real mea
static void _clean_var(VAR *);
static int _expand_arg(pam_handle_t *, char **);
static const char * _pam_get_item_byname(pam_handle_t *, const char *);
-static int _define_var(pam_handle_t *, VAR *);
-static int _undefine_var(pam_handle_t *, VAR *);
+static int _define_var(pam_handle_t *, int, VAR *);
+static int _undefine_var(pam_handle_t *, int, VAR *);
/* This is a flag used to designate an empty string */
static char quote='Z';
@@ -134,7 +134,7 @@ _pam_parse (const pam_handle_t *pamh, int argc, const char **argv,
}
static int
-_parse_config_file(pam_handle_t *pamh, const char *file)
+_parse_config_file(pam_handle_t *pamh, int ctrl, const char *file)
{
int retval;
char buffer[BUF_SIZE];
@@ -168,10 +168,10 @@ _parse_config_file(pam_handle_t *pamh, const char *file)
retval = _check_var(pamh, var);
if (DEFINE_VAR == retval) {
- retval = _define_var(pamh, var);
+ retval = _define_var(pamh, ctrl, var);
} else if (UNDEFINE_VAR == retval) {
- retval = _undefine_var(pamh, var);
+ retval = _undefine_var(pamh, ctrl, var);
}
}
if (PAM_SUCCESS != retval && ILLEGAL_VAR != retval
@@ -191,7 +191,7 @@ _parse_config_file(pam_handle_t *pamh, const char *file)
}
static int
-_parse_env_file(pam_handle_t *pamh, const char *file)
+_parse_env_file(pam_handle_t *pamh, int ctrl, const char *file)
{
int retval=PAM_SUCCESS, i, t;
char buffer[BUF_SIZE], *key, *mark;
@@ -267,6 +267,9 @@ _parse_env_file(pam_handle_t *pamh, const char *file)
if (retval != PAM_SUCCESS) {
D(("error setting env \"%s\"", key));
break;
+ } else if (ctrl & PAM_DEBUG_ARG) {
+ pam_syslog(pamh, LOG_DEBUG,
+ "pam_putenv(\"%s\")", key);
}
}
@@ -691,7 +694,7 @@ static const char * _pam_get_item_byname(pam_handle_t *pamh, const char *name)
return itemval;
}
-static int _define_var(pam_handle_t *pamh, VAR *var)
+static int _define_var(pam_handle_t *pamh, int ctrl, VAR *var)
{
/* We have a variable to define, this is a simple function */
@@ -705,16 +708,22 @@ static int _define_var(pam_handle_t *pamh, VAR *var)
}
retval = pam_putenv(pamh, envvar);
+ if (ctrl & PAM_DEBUG_ARG) {
+ pam_syslog(pamh, LOG_DEBUG, "pam_putenv(\"%s\")", envvar);
+ }
_pam_drop(envvar);
D(("Exit."));
return retval;
}
-static int _undefine_var(pam_handle_t *pamh, VAR *var)
+static int _undefine_var(pam_handle_t *pamh, int ctrl, VAR *var)
{
/* We have a variable to undefine, this is a simple function */
D(("Called and exit."));
+ if (ctrl & PAM_DEBUG_ARG) {
+ pam_syslog(pamh, LOG_DEBUG, "remove variable \"%s\"", var->name);
+ }
return pam_putenv(pamh, var->name);
}
@@ -762,10 +771,10 @@ handle_env (pam_handle_t *pamh, int argc, const char **argv)
ctrl = _pam_parse(pamh, argc, argv, &conf_file, &env_file,
&readenv, &user_env_file, &user_readenv);
- retval = _parse_config_file(pamh, conf_file);
+ retval = _parse_config_file(pamh, ctrl, conf_file);
if(readenv && retval == PAM_SUCCESS) {
- retval = _parse_env_file(pamh, env_file);
+ retval = _parse_env_file(pamh, ctrl, env_file);
if (retval == PAM_IGNORE)
retval = PAM_SUCCESS;
}
@@ -795,7 +804,7 @@ handle_env (pam_handle_t *pamh, int argc, const char **argv)
if (pam_modutil_drop_priv(pamh, &privs, user_entry)) {
retval = PAM_SESSION_ERR;
} else {
- retval = _parse_config_file(pamh, envpath);
+ retval = _parse_config_file(pamh, ctrl, envpath);
if (pam_modutil_regain_priv(pamh, &privs))
retval = PAM_SESSION_ERR;
}
12 years, 11 months
[linux-pam] 2011-05-24 Thorsten Kukuk <kukuk@thkukuk.de>
by kukuk
commit 4f9bffa18076e4ee197513555a4021530b1a1f38
Author: Thorsten Kukuk <kukuk(a)thkukuk.de>
Date: Tue May 24 16:48:11 2011 +0200
2011-05-24 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_listfile/pam_listfile.c (pam_sm_authenticate): quiet
option has no argument, print no missing file if quiet is set
[sf#3194930].
ChangeLog | 6 ++++++
modules/pam_listfile/pam_listfile.c | 13 +++++++++----
2 files changed, 15 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 763c44e..b90a2e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-05-24 Thorsten Kukuk <kukuk(a)thkukuk.de>
+
+ * modules/pam_listfile/pam_listfile.c (pam_sm_authenticate): quiet
+ option has no argument, print no missing file if quiet is set
+ [sf#3194930].
+
2011-05-04 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_lastlog/pam_lastlog.c (last_login_failed): Don't
diff --git a/modules/pam_listfile/pam_listfile.c b/modules/pam_listfile/pam_listfile.c
index 616d220..2af2afd 100644
--- a/modules/pam_listfile/pam_listfile.c
+++ b/modules/pam_listfile/pam_listfile.c
@@ -78,8 +78,14 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
{
const char *junk;
+ /* option quiet has no value */
+ if(!strcmp(argv[i],"quiet")) {
+ quiet = 1;
+ continue;
+ }
+
memset(mybuf,'\0',sizeof(mybuf));
- memset(myval,'\0',sizeof(mybuf));
+ memset(myval,'\0',sizeof(myval));
junk = strchr(argv[i], '=');
if((junk == NULL) || (junk - argv[i]) >= (int) sizeof(mybuf)) {
pam_syslog(pamh,LOG_ERR, "Bad option: \"%s\"",
@@ -142,8 +148,6 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
apply_type=APPLY_TYPE_USER;
strncpy(apply_val,myval,sizeof(apply_val)-1);
}
- } else if (!strcmp(mybuf,"quiet")) {
- quiet = 1;
} else {
free(ifname);
pam_syslog(pamh,LOG_ERR, "Unknown option: %s",mybuf);
@@ -283,7 +287,8 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED,
ifname, citem, citemp, sense);
#endif
if(lstat(ifname,&fileinfo)) {
- pam_syslog(pamh,LOG_ERR, "Couldn't open %s",ifname);
+ if(!quiet)
+ pam_syslog(pamh,LOG_ERR, "Couldn't open %s",ifname);
free(ifname);
return onerr;
}
12 years, 11 months
[linux-pam] 2011-05-04 Thorsten Kukuk <kukuk@thkukuk.de>
by kukuk
commit 6ee536baa197e2d78019e6eab3990c0b9d367fb8
Author: kukuk <kukuk(a)thkukuk.de>
Date: Wed May 4 17:26:16 2011 +0200
2011-05-04 Thorsten Kukuk <kukuk(a)thkukuk.de>
* modules/pam_lastlog/pam_lastlog.c (last_login_failed): Don't
abort with error if btmp file does not exist.
ChangeLog | 6 ++++++
modules/pam_lastlog/pam_lastlog.c | 6 +++++-
2 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 04072c2..763c44e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
+2011-05-04 Thorsten Kukuk <kukuk(a)thkukuk.de>
+
+ * modules/pam_lastlog/pam_lastlog.c (last_login_failed): Don't
+ abort with error if btmp file does not exist.
+
2011-03-21 Tomas Mraz <tm(a)t8m.info>
+
* modules/pam_unix/md5.c (MD5Final): Clear the whole ctx.
2011-03-18 Tomas Mraz <tm(a)t8m.info>
diff --git a/modules/pam_lastlog/pam_lastlog.c b/modules/pam_lastlog/pam_lastlog.c
index b44c175..9e8da7d 100644
--- a/modules/pam_lastlog/pam_lastlog.c
+++ b/modules/pam_lastlog/pam_lastlog.c
@@ -403,9 +403,13 @@ last_login_failed(pam_handle_t *pamh, int announce, const char *user, time_t llt
/* obtain the failed login attempt records from btmp */
fd = open(_PATH_BTMP, O_RDONLY);
if (fd < 0) {
+ int save_errno = errno;
pam_syslog(pamh, LOG_ERR, "unable to open %s: %m", _PATH_BTMP);
D(("unable to open %s file", _PATH_BTMP));
- return PAM_SERVICE_ERR;
+ if (save_errno == ENOENT)
+ return PAM_SUCCESS;
+ else
+ return PAM_SERVICE_ERR;
}
while ((retval=pam_modutil_read(fd, (void *)&ut,
12 years, 11 months