]> granicus.if.org Git - linux-pam/commitdiff
Relevant BUGIDs:
authorThorsten Kukuk <kukuk@thkukuk.de>
Fri, 24 Sep 2004 09:18:21 +0000 (09:18 +0000)
committerThorsten Kukuk <kukuk@thkukuk.de>
Fri, 24 Sep 2004 09:18:21 +0000 (09:18 +0000)
Purpose of commit:

Commit summary:
---------------

bugfix: Fix lot of compiler warnings
new feature: add broken_shadow option to pam_unix (patch from Linux
             distributions)

CHANGELOG
examples/xsh.c
libpamc/test/regress/Makefile
modules/pam_limits/pam_limits.c
modules/pam_mkhomedir/pam_mkhomedir.c
modules/pam_unix/README
modules/pam_unix/pam_unix_acct.c
modules/pam_unix/support.h
modules/pam_xauth/pam_xauth.c
modules/pammodutil/modutil_getlogin.c
modules/pammodutil/modutil_ioloop.c

index 1593e5937486fdbb5951373178ad23c5824b92ab..33e26f0eaf31620abd3b51a7d351f0bcfd38e208 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -112,6 +112,8 @@ BerliOS Bugs are marked with (BerliOS #XXXX).
   (from Linux distributors - kukuk)
 * Add pam_xauth module (Bug 436440 - kukuk)
 * configure.in: Fix check for libcrypt (Bug 417704 - kukuk)
+* Add the "broken_shadow" argument to pam_unix, for ignoring errors
+  reading shadow information (from Linux distributors - kukuk)
 
 0.77: Mon Sep 23 10:25:42 PDT 2002
 
index fdbbbfd0561c5609cb5f6beaa64ce646f6ec70b3..f8fa1426bd5b2afa83b0d32635fb8b99c2577c75 100644 (file)
@@ -5,14 +5,14 @@
 /* Andrew Morgan (morgan@kernel.org) -- an example application
  * that invokes a shell, based on blank.c */
 
+#include <security/_pam_aconf.h>
+
 #include <stdio.h>
 #include <stdlib.h>
 
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 
-#include <security/_pam_aconf.h>
-
 #include <pwd.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -155,7 +155,7 @@ int main(int argc, char **argv)
               fprintf(stderr,"%s: problem closing a session\n",argv[0]);
               break;
          }
-         
+
          /* `0' could be as above */
          retcode = pam_setcred(pamh, PAM_DELETE_CRED);
          bail_out(pamh,0,retcode,"pam_setcred");
index ff63e5f087adf2beb37e5f3576d7ae0ba7149a32..cba474f91afd8ead9b2f66771d3c56654683508d 100644 (file)
@@ -1,7 +1,7 @@
 CFLAGS = -g -I ../../include
 
 test.libpamc: test.libpamc.o
-       $(CC) -o $@ $< -L ../.. -lpamc
+       $(CC) -o $@ $(CFLAGS) $< -L ../.. -lpamc
 
 clean:
        rm -f test.libpamc test.libpamc.o
index 0d7f21851b7bdc2b44407578c603625b8f6c1c6e..536446bd11a40b6344374e3ea18c0f39520db731 100644 (file)
@@ -311,7 +311,7 @@ static void process_limit(int source, const char *lim_type,
     int limit_item;
     int limit_type = 0;
     long limit_value;
-    const char **endptr = &lim_value;
+    char *endptr;
     const char *value_orig = lim_value;
 
     if (ctrl & PAM_DEBUG_ARG)
@@ -367,14 +367,10 @@ static void process_limit(int source, const char *lim_type,
         return;
     }
 
-    /*
-     * there is a warning here because the library prototype for this
-     * function is incorrect.
-     */
-    limit_value = strtol(lim_value, endptr, 10);
+    limit_value = strtol (lim_value, &endptr, 10);
 
     /* special case value when limiting logins */
-    if (limit_value == 0 && value_orig == *endptr) { /* no chars read */
+    if (limit_value == 0 && value_orig == endptr) { /* no chars read */
         if (strcmp(lim_value,"-") != 0) {
             _pam_log(LOG_DEBUG,"wrong limit value '%s'", lim_value);
             return;
index 342637c1632e3482e92457a9c6ba806f709bc13a..11180444332c18f1b701c2d7379f29ce2a85d76e 100644 (file)
@@ -4,10 +4,10 @@
    when the session begins. This allows users to be present in central
    database (such as nis, kerb or ldap) without using a distributed
    file system or pre-creating a large number of directories.
-   
+
    Here is a sample /etc/pam.d/login file for Debian GNU/Linux
    2.1:
-   
+
    auth       requisite  pam_securetty.so
    auth       sufficient pam_ldap.so
    auth       required   pam_pwdb.so
    session    required   pam_mkhomedir.so skel=/etc/skel/ umask=0022
    session    required   pam_pwdb.so
    session    optional   pam_lastlog.so
-   password   required   pam_pwdb.so   
-   
+   password   required   pam_pwdb.so
+
    Released under the GNU LGPL version 2 or later
    Originally written by Jason Gunthorpe <jgg@debian.org> Feb 1999
-   Structure taken from pam_lastlogin by Andrew Morgan 
+   Structure taken from pam_lastlogin by Andrew Morgan
      <morgan@parc.power.net> 1996
  */
 
@@ -51,6 +51,8 @@
 
 #include <security/pam_modules.h>
 #include <security/_pam_macros.h>
+#include <security/_pam_modutil.h>
+
 
 /* argument parsing */
 #define MKHOMEDIR_DEBUG      020       /* keep quiet about things */
@@ -98,8 +100,8 @@ static int _pam_parse(int flags, int argc, const char **argv)
    return ctrl;
 }
 
-/* This common function is used to send a message to the applications 
-   conversion function. Our only use is to ask the application to print 
+/* This common function is used to send a message to the applications
+   conversion function. Our only use is to ask the application to print
    an informative message that we are creating a home directory */
 static int converse(pam_handle_t * pamh, int ctrl, int nargs
                    ,struct pam_message **message
@@ -191,7 +193,7 @@ static int create_homedir(pam_handle_t * pamh, int ctrl,
    {
       _log_err(LOG_DEBUG, "unable to create directory %s",dest);
       return PAM_PERM_DENIED;
-   }   
+   }
    if (chmod(dest,0777 & (~UMask)) != 0 ||
        chown(dest,pwd->pw_uid,pwd->pw_gid) != 0)
    {
@@ -214,7 +216,7 @@ static int create_homedir(pam_handle_t * pamh, int ctrl,
    }
 
    for (Dir = readdir(D); Dir != 0; Dir = readdir(D))
-   {  
+   {
       int SrcFd;
       int DestFd;
       int Res;
@@ -344,7 +346,7 @@ int pam_sm_open_session(pam_handle_t * pamh, int flags, int argc
    const char *user;
    const struct passwd *pwd;
    struct stat St;
-      
+
    /* Parse the flag values */
    ctrl = _pam_parse(flags, argc, argv);
 
@@ -373,7 +375,7 @@ int pam_sm_open_session(pam_handle_t * pamh, int flags, int argc
 }
 
 /* Ignore */
-PAM_EXTERN 
+PAM_EXTERN
 int pam_sm_close_session(pam_handle_t * pamh, int flags, int argc
                         ,const char **argv)
 {
index d6b1f39527c77a04f896dd353e713937d74ea306..afeee3dad678d9fc1910a016f36127d4918c9c6c 100644 (file)
@@ -31,5 +31,7 @@ The following options are recognized:
        nis             -       use NIS RPC for setting new password
        remember=X      -       remember X old passwords, they are kept in
                                /etc/security/opasswd in MD5 crypted form
+       broken_shadow   -       ignore errors reading shadow information for
+                               users in the account management module
 
        invalid arguments are logged to syslog.
index 178b6037465ab409dab7651f85da74fd2ff26699..58ba93c1e5cde3df15c7287708ae630b6f2eb734 100644 (file)
@@ -128,6 +128,10 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                return PAM_SUCCESS;
        }
 
+       if (!spent)
+               if (on(UNIX_BROKEN_SHADOW,ctrl))
+                       return PAM_SUCCESS;
+
        if (!spent)
                return PAM_AUTHINFO_UNAVAIL;    /* Couldn't get username from shadow */
 
index 3127e6b036ca17bd5d7d0620eb7558e1eb0b72c2..d9212c28f9bcb833984657b2b04fc53ac67b0c7c 100644 (file)
@@ -81,8 +81,10 @@ typedef struct {
 #define UNIX_LIKE_AUTH           19    /* need to auth for setcred to work */
 #define UNIX_REMEMBER_PASSWD     20    /* Remember N previous passwords */
 #define UNIX_NOREAP              21     /* don't reap child process */
+#define UNIX_BROKEN_SHADOW       22     /* ignore errors reading password aging
+                                        * information during acct management */
 /* -------------- */
-#define UNIX_CTRLS_              22    /* number of ctrl arguments defined */
+#define UNIX_CTRLS_              23    /* number of ctrl arguments defined */
 
 
 static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
@@ -112,6 +114,7 @@ static const UNIX_Ctrls unix_args[UNIX_CTRLS_] =
 /* UNIX_LIKE_AUTH */       {"likeauth",        _ALL_ON_,            01000000},
 /* UNIX_REMEMBER_PASSWD */ {"remember=",       _ALL_ON_,            02000000},
 /* UNIX_NOREAP */          {"noreap",          _ALL_ON_,            04000000},
+/* UNIX_BROKEN_SHADOW */   {"broken_shadow",   _ALL_ON_,           010000000},
 };
 
 #define UNIX_DEFAULTS  (unix_args[UNIX__NONULL].flag)
index 58dd059a6dddb74d5a5a18ffb16bcef4a82ffdd0..1f1e65a3fae08df2ed3407805a5db0d81adac641 100644 (file)
@@ -33,7 +33,7 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ident "$Id$"
+/* "$Id$" */
 
 #include "../../_pam_aconf.h"
 #include <sys/types.h>
index 28616337f93e56273bd5461898a97802528ba818..1bbb2450149c1b8dc9919e3e11cb9eb03f6bcae9 100644 (file)
@@ -17,7 +17,8 @@
 const char *_pammodutil_getlogin(pam_handle_t *pamh)
 {
     int status;
-    const char *logname, *curr_tty;
+    char *logname;
+    const char *curr_tty;
     char *curr_user;
     struct utmp *ut, line;
 
index 4176b658779a26308193c3dcadad4d003febd509..a852a7b8b8d6c9bb57b0698dbed7a8ee86a44af4 100644 (file)
@@ -8,10 +8,13 @@
 #include <unistd.h>
 #include <errno.h>
 
+#include <security/pam_modules.h>
+#include "include/security/_pam_modutil.h"
+
 int _pammodutil_read(int fd, char *buffer, int count)
 {
        int block, offset = 0;
+
        while (count > 0) {
                block = read(fd, &buffer[offset], count);
 
@@ -31,7 +34,7 @@ int _pammodutil_read(int fd, char *buffer, int count)
 int _pammodutil_write(int fd, const char *buffer, int count)
 {
        int block, offset = 0;
-                                                                                
+
        while (count > 0) {
                block = write(fd, &buffer[offset], count);
 
@@ -44,7 +47,6 @@ int _pammodutil_write(int fd, const char *buffer, int count)
                offset += block;
                count -= block;
        }
-                                                                                
+
        return offset;
 }
-