]> granicus.if.org Git - linux-pam/blobdiff - modules/pam_unix/pam_unix_auth.c
Relevant BUGIDs:
[linux-pam] / modules / pam_unix / pam_unix_auth.c
index 67497e067a67c44e8a5d7b5540fc8a53b59355ff..5cdec27f46fe868d605f21629acf7211b93ba6f7 100644 (file)
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * ALTERNATIVELY, this product may be distributed under the terms of
  * the GNU Public License, in which case the provisions of the GPL are
  * required INSTEAD OF the above restrictions.  (This clause is
  * necessary due to a potential bad interaction between the GPL and
  * the restrictions contained in a BSD-style copyright.)
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -37,7 +37,7 @@
 
 /* #define DEBUG */
 
-#include <security/_pam_aconf.h>
+#include "config.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -48,6 +48,7 @@
 #include <ctype.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <syslog.h>
 
 /* indicate the following groups are defined */
 
 #define _PAM_EXTERN_FUNCTIONS
 #include <security/_pam_macros.h>
 #include <security/pam_modules.h>
-
-#ifndef LINUX_PAM
-#include <security/pam_appl.h>
-#endif                         /* LINUX_PAM */
+#include <security/pam_ext.h>
 
 #include "support.h"
 
@@ -88,13 +86,15 @@ do {                                                                \
                *ret_data = retval;                             \
                pam_set_data(pamh, "unix_setcred_return",       \
                             (void *) ret_data, setcred_free);  \
-       }                                                       \
+       } else if (ret_data)                                    \
+         free (ret_data);                                      \
        D(("done. [%s]", pam_strerror(pamh, retval)));          \
        return retval;                                          \
 } while (0)
 
 
-static void setcred_free (pam_handle_t * pamh, void *ptr, int err)
+static void
+setcred_free (pam_handle_t *pamh UNUSED, void *ptr, int err UNUSED)
 {
        if (ptr)
                free (ptr);
@@ -106,7 +106,8 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
 {
        unsigned int ctrl;
        int retval, *ret_data = NULL;
-       const char *name, *p;
+       const char *name;
+       const void *p;
 
        D(("called."));
 
@@ -128,7 +129,7 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
                 * alphanumeric character.
                 */
                if (name == NULL || !isalnum(*name)) {
-                       _log_err(LOG_ERR, pamh, "bad username [%s]", name);
+                       pam_syslog(pamh, LOG_ERR, "bad username [%s]", name);
                        retval = PAM_USER_UNKNOWN;
                        AUTH_RETURN;
                }
@@ -148,7 +149,7 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
 
        /* if this user does not have a password... */
 
-       if (_unix_blankpasswd(ctrl, name)) {
+       if (_unix_blankpasswd(pamh, ctrl, name)) {
                D(("user '%s' has blank passwd", name));
                name = NULL;
                retval = PAM_SUCCESS;
@@ -156,12 +157,12 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
        }
        /* get this user's authentication token */
 
-       retval = _unix_read_password(pamh, ctrl, NULL, "Password: ", NULL
+       retval = _unix_read_password(pamh, ctrl, NULL, _("Password: "), NULL
                                     ,_UNIX_AUTHTOK, &p);
        if (retval != PAM_SUCCESS) {
                if (retval != PAM_CONV_AGAIN) {
-                       _log_err(LOG_CRIT, pamh, "auth could not identify password for [%s]"
-                                ,name);
+                       pam_syslog(pamh, LOG_CRIT,
+                           "auth could not identify password for [%s]", name);
                } else {
                        D(("conversation function is not ready yet"));
                        /*
@@ -183,7 +184,7 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
 }
 
 
-/* 
+/*
  * The only thing _pam_set_credentials_unix() does is initialization of
  * UNIX group IDs.
  *
@@ -192,22 +193,23 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
  * warned you. -- AOY
  */
 
-PAM_EXTERN int pam_sm_setcred(pam_handle_t * pamh, int flags
-                             ,int argc, const char **argv)
+PAM_EXTERN int
+pam_sm_setcred (pam_handle_t *pamh, int flags UNUSED,
+               int argc UNUSED, const char **argv UNUSED)
 {
        int retval;
-       int *pretval = NULL;
+       const void *pretval = NULL;
 
        D(("called."));
 
        retval = PAM_SUCCESS;
 
        D(("recovering return code from auth call"));
-       /* We will only find something here if UNIX_LIKE_AUTH is set -- 
+       /* We will only find something here if UNIX_LIKE_AUTH is set --
           don't worry about an explicit check of argv. */
-       pam_get_data(pamh, "unix_setcred_return", (const void **) &pretval);
-       if(pretval) {
-               retval = *pretval;
+       if (pam_get_data(pamh, "unix_setcred_return", &pretval) == PAM_SUCCESS
+           && pretval) {
+               retval = *(const int *)pretval;
                pam_set_data(pamh, "unix_setcred_return", NULL, NULL);
                D(("recovered data indicates that old retval was %d", retval));
        }