aboutsummaryrefslogtreecommitdiff
path: root/libpam/pam_item.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpam/pam_item.c')
-rw-r--r--libpam/pam_item.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/libpam/pam_item.c b/libpam/pam_item.c
index 42857da5..2e43d767 100644
--- a/libpam/pam_item.c
+++ b/libpam/pam_item.c
@@ -6,6 +6,7 @@
#include "pam_private.h"
#include "pam_inline.h"
+#include "pam_i18n.h"
#include <ctype.h>
#include <stdlib.h>
@@ -13,7 +14,7 @@
#include <syslog.h>
#define TRY_SET(X, Y) \
-{ \
+do { \
if ((X) != (Y)) { \
char *_TMP_ = _pam_strdup(Y); \
if (_TMP_ == NULL && (Y) != NULL) \
@@ -21,7 +22,7 @@
free(X); \
(X) = _TMP_; \
} \
-}
+} while(0)
/* functions */
@@ -31,13 +32,19 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
D(("called"));
- IF_NO_PAMH("pam_set_item", pamh, PAM_SYSTEM_ERR);
+ IF_NO_PAMH(pamh, PAM_SYSTEM_ERR);
retval = PAM_SUCCESS;
switch (item_type) {
case PAM_SERVICE:
+ if (item == NULL) {
+ pam_syslog(pamh, LOG_ERR,
+ "pam_set_item: attempt to set service to NULL");
+ retval = PAM_BAD_ITEM;
+ break;
+ }
/* Setting handlers_loaded to 0 will cause the handlers
* to be reloaded on the next call to a service module.
*/
@@ -46,7 +53,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
{
char *tmp;
for (tmp=pamh->service_name; *tmp; ++tmp)
- *tmp = tolower(*tmp); /* require lower case */
+ *tmp = tolower((unsigned char)*tmp); /* require lower case */
}
break;
@@ -61,7 +68,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
break;
case PAM_TTY:
- D(("setting tty to %s", item));
+ D(("setting tty to %s", (const char *)item));
TRY_SET(pamh->tty, item);
break;
@@ -113,8 +120,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item)
} else {
struct pam_conv *tconv;
- if ((tconv=
- (struct pam_conv *) malloc(sizeof(struct pam_conv))
+ if ((tconv = malloc(sizeof(struct pam_conv))
) == NULL) {
pam_syslog(pamh, LOG_CRIT,
"pam_set_item: malloc failed for pam_conv");
@@ -177,7 +183,7 @@ int pam_get_item (const pam_handle_t *pamh, int item_type, const void **item)
int retval = PAM_SUCCESS;
D(("called."));
- IF_NO_PAMH("pam_get_item", pamh, PAM_SYSTEM_ERR);
+ IF_NO_PAMH(pamh, PAM_SYSTEM_ERR);
if (item == NULL) {
pam_syslog(pamh, LOG_ERR,
@@ -280,7 +286,7 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
D(("called."));
- IF_NO_PAMH("pam_get_user", pamh, PAM_SYSTEM_ERR);
+ IF_NO_PAMH(pamh, PAM_SYSTEM_ERR);
if (user == NULL) {
/* ensure that the module has supplied a destination */
@@ -372,7 +378,7 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt)
break;
} else {
/* conversation should have given a response */
- D(("pam_get_user: no response provided"));
+ D(("no response provided"));
retval = PAM_CONV_ERR;
}
/* fallthrough */