- include patches recently submitted and applied to upstream CVS
This commit is contained in:
		
							parent
							
								
									a526ddfed4
								
							
						
					
					
						commit
						de4fdba40b
					
				| @ -67,7 +67,7 @@ diff -up Linux-PAM-1.1.1/modules/Makefile.am.faillock Linux-PAM-1.1.1/modules/Ma | |||||||
| diff -up Linux-PAM-1.1.1/modules/pam_faillock/faillock.c.faillock Linux-PAM-1.1.1/modules/pam_faillock/faillock.c
 | diff -up Linux-PAM-1.1.1/modules/pam_faillock/faillock.c.faillock Linux-PAM-1.1.1/modules/pam_faillock/faillock.c
 | ||||||
| --- Linux-PAM-1.1.1/modules/pam_faillock/faillock.c.faillock	2010-09-17 15:58:41.000000000 +0200
 | --- Linux-PAM-1.1.1/modules/pam_faillock/faillock.c.faillock	2010-09-17 15:58:41.000000000 +0200
 | ||||||
| +++ Linux-PAM-1.1.1/modules/pam_faillock/faillock.c	2010-09-17 15:58:41.000000000 +0200
 | +++ Linux-PAM-1.1.1/modules/pam_faillock/faillock.c	2010-09-17 15:58:41.000000000 +0200
 | ||||||
| @@ -0,0 +1,142 @@
 | @@ -0,0 +1,147 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (c) 2010 Tomas Mraz <tmraz@redhat.com>
 | + * Copyright (c) 2010 Tomas Mraz <tmraz@redhat.com>
 | ||||||
| + *
 | + *
 | ||||||
| @ -123,6 +123,11 @@ diff -up Linux-PAM-1.1.1/modules/pam_faillock/faillock.c.faillock Linux-PAM-1.1. | |||||||
| +	int flags = O_RDWR;
 | +	int flags = O_RDWR;
 | ||||||
| +	int fd;
 | +	int fd;
 | ||||||
| +
 | +
 | ||||||
|  | +	if (strstr(user, "../") != NULL)
 | ||||||
|  | +	/* just a defensive programming as the user must be a
 | ||||||
|  | +	 * valid user on the system anyway
 | ||||||
|  | +	 */
 | ||||||
|  | +		return -1;
 | ||||||
| +	path = malloc(strlen(dir) + strlen(user) + 2);
 | +	path = malloc(strlen(dir) + strlen(user) + 2);
 | ||||||
| +	if (path == NULL)
 | +	if (path == NULL)
 | ||||||
| +		return -1;
 | +		return -1;
 | ||||||
|  | |||||||
							
								
								
									
										64
									
								
								pam-1.1.3-limits-nosetreuid.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								pam-1.1.3-limits-nosetreuid.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | diff -up Linux-PAM-1.1.3/modules/pam_limits/pam_limits.c.nosetreuid Linux-PAM-1.1.3/modules/pam_limits/pam_limits.c
 | ||||||
|  | --- Linux-PAM-1.1.3/modules/pam_limits/pam_limits.c.nosetreuid	2009-02-20 14:27:14.000000000 +0100
 | ||||||
|  | +++ Linux-PAM-1.1.3/modules/pam_limits/pam_limits.c	2010-11-11 12:31:04.000000000 +0100
 | ||||||
|  | @@ -103,7 +103,6 @@ struct pam_limit_s {
 | ||||||
|  |  /* argument parsing */ | ||||||
|  |   | ||||||
|  |  #define PAM_DEBUG_ARG       0x0001 | ||||||
|  | -#define PAM_DO_SETREUID     0x0002
 | ||||||
|  |  #define PAM_UTMP_EARLY      0x0004 | ||||||
|  |  #define PAM_NO_AUDIT        0x0008 | ||||||
|  |   | ||||||
|  | @@ -127,8 +126,6 @@ _pam_parse (const pam_handle_t *pamh, in
 | ||||||
|  |  	    ctrl |= PAM_DEBUG_ARG; | ||||||
|  |  	} else if (!strncmp(*argv,"conf=",5)) { | ||||||
|  |  	    pl->conf_file = *argv+5; | ||||||
|  | -	} else if (!strncmp(*argv,"change_uid",10)) {
 | ||||||
|  | -	    ctrl |= PAM_DO_SETREUID;
 | ||||||
|  |  	} else if (!strcmp(*argv,"utmp_early")) { | ||||||
|  |  	    ctrl |= PAM_UTMP_EARLY; | ||||||
|  |  	} else if (!strcmp(*argv,"noaudit")) { | ||||||
|  | @@ -777,10 +774,6 @@ out:
 | ||||||
|  |  	return retval; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -    if (ctrl & PAM_DO_SETREUID) {
 | ||||||
|  | -	setreuid(pwd->pw_uid, -1);
 | ||||||
|  | -    }
 | ||||||
|  | -
 | ||||||
|  |      retval = setup_limits(pamh, pwd->pw_name, pwd->pw_uid, ctrl, pl); | ||||||
|  |      if (retval & LOGIN_ERR) | ||||||
|  |  	pam_error(pamh, _("Too many logins for '%s'."), pwd->pw_name); | ||||||
|  | diff -up Linux-PAM-1.1.3/modules/pam_limits/pam_limits.8.xml.nosetreuid Linux-PAM-1.1.3/modules/pam_limits/pam_limits.8.xml
 | ||||||
|  | --- Linux-PAM-1.1.3/modules/pam_limits/pam_limits.8.xml.nosetreuid	2009-06-01 09:03:20.000000000 +0200
 | ||||||
|  | +++ Linux-PAM-1.1.3/modules/pam_limits/pam_limits.8.xml	2010-11-11 12:32:35.000000000 +0100
 | ||||||
|  | @@ -23,9 +23,6 @@
 | ||||||
|  |      <cmdsynopsis id="pam_limits-cmdsynopsis"> | ||||||
|  |        <command>pam_limits.so</command> | ||||||
|  |        <arg choice="opt"> | ||||||
|  | -        change_uid
 | ||||||
|  | -      </arg>
 | ||||||
|  | -      <arg choice="opt">
 | ||||||
|  |          conf=<replaceable>/path/to/limits.conf</replaceable> | ||||||
|  |        </arg> | ||||||
|  |        <arg choice="opt"> | ||||||
|  | @@ -72,19 +69,6 @@
 | ||||||
|  |      <variablelist> | ||||||
|  |        <varlistentry> | ||||||
|  |          <term> | ||||||
|  | -          <option>change_uid</option>
 | ||||||
|  | -        </term>
 | ||||||
|  | -        <listitem>
 | ||||||
|  | -          <para>
 | ||||||
|  | -            Change real uid to the user for who the limits are set up. Use this
 | ||||||
|  | -            option if you have problems like login not forking a shell for user
 | ||||||
|  | -            who has no processes. Be warned that something else may break when
 | ||||||
|  | -            you do this.
 | ||||||
|  | -          </para>
 | ||||||
|  | -        </listitem>
 | ||||||
|  | -      </varlistentry>
 | ||||||
|  | -      <varlistentry>
 | ||||||
|  | -        <term>
 | ||||||
|  |            <option>conf=<replaceable>/path/to/limits.conf</replaceable></option> | ||||||
|  |          </term> | ||||||
|  |          <listitem> | ||||||
							
								
								
									
										336
									
								
								pam-1.1.3-limits-range.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								pam-1.1.3-limits-range.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,336 @@ | |||||||
|  | Index: modules/pam_limits/limits.conf.5.xml
 | ||||||
|  | ===================================================================
 | ||||||
|  | RCS file: /cvsroot/pam/Linux-PAM/modules/pam_limits/limits.conf.5.xml,v | ||||||
|  | retrieving revision 1.10 | ||||||
|  | retrieving revision 1.11 | ||||||
|  | diff -u -p -r1.10 -r1.11
 | ||||||
|  | --- modules/pam_limits/limits.conf.5.xml	24 Nov 2010 08:49:30 -0000	1.10
 | ||||||
|  | +++ modules/pam_limits/limits.conf.5.xml	14 Dec 2010 08:40:40 -0000	1.11
 | ||||||
|  | @@ -60,6 +60,33 @@
 | ||||||
|  |                  number of logins of all users that are member of the group. | ||||||
|  |                </para> | ||||||
|  |              </listitem> | ||||||
|  | +            <listitem>
 | ||||||
|  | +              <para>
 | ||||||
|  | +                an uid range specified as <replaceable><min_uid></replaceable><emphasis
 | ||||||
|  | +                remap='B'>:</emphasis><replaceable><max_uid></replaceable>. If min_uid
 | ||||||
|  | +                is omitted, the match is exact for the max_uid. If max_uid is omitted, all
 | ||||||
|  | +                uids greater than or equal min_uid match.
 | ||||||
|  | +              </para>
 | ||||||
|  | +            </listitem>
 | ||||||
|  | +            <listitem>
 | ||||||
|  | +              <para>
 | ||||||
|  | +                a gid range specified as <emphasis
 | ||||||
|  | +                remap='B'>@</emphasis><replaceable><min_gid></replaceable><emphasis
 | ||||||
|  | +                remap='B'>:</emphasis><replaceable><max_gid></replaceable>. If min_gid
 | ||||||
|  | +                is omitted, the match is exact for the max_gid. If max_gid is omitted, all
 | ||||||
|  | +                gids greater than or equal min_gid match. For the exact match all groups including
 | ||||||
|  | +                the user's supplementary groups are examined. For the range matches only
 | ||||||
|  | +                the user's primary group is examined.
 | ||||||
|  | +              </para>
 | ||||||
|  | +            </listitem>
 | ||||||
|  | +            <listitem>
 | ||||||
|  | +              <para>
 | ||||||
|  | +                a gid specified as <emphasis
 | ||||||
|  | +                remap='B'>%:</emphasis><replaceable><gid></replaceable> applicable
 | ||||||
|  | +                to maxlogins limit only. It limits the total number of logins of all users
 | ||||||
|  | +                that are member of the group with the specified gid.
 | ||||||
|  | +              </para>
 | ||||||
|  | +            </listitem>
 | ||||||
|  |            </itemizedlist> | ||||||
|  |          </listitem> | ||||||
|  |        </varlistentry> | ||||||
|  | @@ -276,12 +303,15 @@
 | ||||||
|  |      </para> | ||||||
|  |      <programlisting> | ||||||
|  |  *               soft    core            0 | ||||||
|  | -*               hard    rss             10000
 | ||||||
|  | +*               hard    nofile          512
 | ||||||
|  |  @student        hard    nproc           20 | ||||||
|  |  @faculty        soft    nproc           20 | ||||||
|  |  @faculty        hard    nproc           50 | ||||||
|  |  ftp             hard    nproc           0 | ||||||
|  |  @student        -       maxlogins       4 | ||||||
|  | +:123            hard    cpu             5000
 | ||||||
|  | +@500:           soft    cpu             10000
 | ||||||
|  | +600:700         hard    locks           10
 | ||||||
|  |      </programlisting> | ||||||
|  |    </refsect1> | ||||||
|  |   | ||||||
|  | Index: modules/pam_limits/pam_limits.c
 | ||||||
|  | ===================================================================
 | ||||||
|  | RCS file: /cvsroot/pam/Linux-PAM/modules/pam_limits/pam_limits.c,v | ||||||
|  | retrieving revision 1.48 | ||||||
|  | retrieving revision 1.49 | ||||||
|  | diff -u -p -r1.48 -r1.49
 | ||||||
|  | --- modules/pam_limits/pam_limits.c	18 Nov 2010 09:37:32 -0000	1.48
 | ||||||
|  | +++ modules/pam_limits/pam_limits.c	14 Dec 2010 08:40:40 -0000	1.49
 | ||||||
|  | @@ -55,6 +55,12 @@
 | ||||||
|  |  #define LIMITS_DEF_DEFAULT  4 /* limit was set by an default entry */ | ||||||
|  |  #define LIMITS_DEF_NONE     5 /* this limit was not set yet */ | ||||||
|  |   | ||||||
|  | +#define LIMIT_RANGE_ERR    -1 /* error in specified uid/gid range */
 | ||||||
|  | +#define LIMIT_RANGE_NONE    0 /* no range specified */
 | ||||||
|  | +#define LIMIT_RANGE_ONE     1 /* exact uid/gid specified (:max_uid)*/
 | ||||||
|  | +#define LIMIT_RANGE_MIN     2 /* only minimum uid/gid specified (min_uid:) */
 | ||||||
|  | +#define LIMIT_RANGE_MM      3 /* both min and max uid/gid specified (min_uid:max_uid) */
 | ||||||
|  | +
 | ||||||
|  |  static const char *limits_def_names[] = { | ||||||
|  |         "USER", | ||||||
|  |         "GROUP", | ||||||
|  | @@ -520,8 +526,57 @@ process_limit (const pam_handle_t *pamh,
 | ||||||
|  |      return; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static int parse_config_file(pam_handle_t *pamh, const char *uname, int ctrl,
 | ||||||
|  | -			     struct pam_limit_s *pl)
 | ||||||
|  | +static int
 | ||||||
|  | +parse_uid_range(pam_handle_t *pamh, const char *domain,
 | ||||||
|  | +		uid_t *min_uid, uid_t *max_uid)
 | ||||||
|  | +{
 | ||||||
|  | +    const char *range = domain;
 | ||||||
|  | +    char *pmax;
 | ||||||
|  | +    char *endptr;
 | ||||||
|  | +    int rv = LIMIT_RANGE_MM;
 | ||||||
|  | +
 | ||||||
|  | +    if ((pmax=strchr(range, ':')) == NULL)
 | ||||||
|  | +	return LIMIT_RANGE_NONE;
 | ||||||
|  | +    ++pmax;
 | ||||||
|  | +
 | ||||||
|  | +    if (range[0] == '@' || range[0] == '%')
 | ||||||
|  | +	++range;
 | ||||||
|  | +
 | ||||||
|  | +    if (range[0] == ':')
 | ||||||
|  | +	rv = LIMIT_RANGE_ONE;
 | ||||||
|  | +    else {
 | ||||||
|  | +	    errno = 0;
 | ||||||
|  | +	    *min_uid = strtoul (range, &endptr, 10);
 | ||||||
|  | +	    if (errno != 0 || (range == endptr) || *endptr != ':') {
 | ||||||
|  | +		pam_syslog(pamh, LOG_DEBUG,
 | ||||||
|  | +			   "wrong min_uid/gid value in '%s'", domain);
 | ||||||
|  | +		return LIMIT_RANGE_ERR;
 | ||||||
|  | +	    }
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  | +    if (*pmax == '\0') {
 | ||||||
|  | +	if (rv == LIMIT_RANGE_ONE)
 | ||||||
|  | +	    return LIMIT_RANGE_ERR;
 | ||||||
|  | +	else
 | ||||||
|  | +	    return LIMIT_RANGE_MIN;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  | +    errno = 0;
 | ||||||
|  | +    *max_uid = strtoul (pmax, &endptr, 10);
 | ||||||
|  | +    if (errno != 0 || (pmax == endptr) || *endptr != '\0') {
 | ||||||
|  | +	pam_syslog(pamh, LOG_DEBUG,
 | ||||||
|  | +		   "wrong max_uid/gid value in '%s'", domain);
 | ||||||
|  | +	return LIMIT_RANGE_ERR;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  | +    if (rv == LIMIT_RANGE_ONE)
 | ||||||
|  | +	*min_uid = *max_uid;
 | ||||||
|  | +    return rv;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static int
 | ||||||
|  | +parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid,
 | ||||||
|  | +			     int ctrl, struct pam_limit_s *pl)
 | ||||||
|  |  { | ||||||
|  |      FILE *fil; | ||||||
|  |      char buf[LINE_LENGTH]; | ||||||
|  | @@ -543,8 +598,10 @@ static int parse_config_file(pam_handle_
 | ||||||
|  |          char item[LINE_LENGTH]; | ||||||
|  |          char value[LINE_LENGTH]; | ||||||
|  |          int i; | ||||||
|  | +        int rngtype;
 | ||||||
|  |          size_t j; | ||||||
|  |          char *tptr,*line; | ||||||
|  | +        uid_t min_uid = (uid_t)-1, max_uid = (uid_t)-1;
 | ||||||
|  |   | ||||||
|  |          line = buf; | ||||||
|  |          /* skip the leading white space */ | ||||||
|  | @@ -572,6 +629,11 @@ static int parse_config_file(pam_handle_
 | ||||||
|  |          for(j=0; j < strlen(ltype); j++) | ||||||
|  |              ltype[j]=tolower(ltype[j]); | ||||||
|  |   | ||||||
|  | +	if ((rngtype=parse_uid_range(pamh, domain, &min_uid, &max_uid)) < 0) {
 | ||||||
|  | +	    pam_syslog(pamh, LOG_WARNING, "invalid uid range '%s' - skipped", domain);
 | ||||||
|  | +	    continue;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  |          if (i == 4) { /* a complete line */ | ||||||
|  |  	    for(j=0; j < strlen(item); j++) | ||||||
|  |  		item[j]=tolower(item[j]); | ||||||
|  | @@ -581,47 +643,133 @@ static int parse_config_file(pam_handle_
 | ||||||
|  |              if (strcmp(uname, domain) == 0) /* this user have a limit */ | ||||||
|  |                  process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl); | ||||||
|  |              else if (domain[0]=='@') { | ||||||
|  | -		    if (ctrl & PAM_DEBUG_ARG) {
 | ||||||
|  | +		if (ctrl & PAM_DEBUG_ARG) {
 | ||||||
|  |  			pam_syslog(pamh, LOG_DEBUG, | ||||||
|  |  				   "checking if %s is in group %s", | ||||||
|  |  				   uname, domain + 1); | ||||||
|  | -		    }
 | ||||||
|  | -                if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1))
 | ||||||
|  | -                    process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl,
 | ||||||
|  | +		}
 | ||||||
|  | +		switch(rngtype) {
 | ||||||
|  | +		    case LIMIT_RANGE_NONE:
 | ||||||
|  | +			if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1))
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_ONE:
 | ||||||
|  | +			if (pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid))
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl,
 | ||||||
|  |  				  pl); | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_MM:
 | ||||||
|  | +			if (gid > (gid_t)max_uid)
 | ||||||
|  | +			    break;
 | ||||||
|  | +			/* fallthrough */
 | ||||||
|  | +		    case LIMIT_RANGE_MIN:
 | ||||||
|  | +			if (gid >= (gid_t)min_uid)
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +		}
 | ||||||
|  |              } else if (domain[0]=='%') { | ||||||
|  | -		    if (ctrl & PAM_DEBUG_ARG) {
 | ||||||
|  | +		if (ctrl & PAM_DEBUG_ARG) {
 | ||||||
|  |  			pam_syslog(pamh, LOG_DEBUG, | ||||||
|  |  				   "checking if %s is in group %s", | ||||||
|  |  				   uname, domain + 1); | ||||||
|  | -		    }
 | ||||||
|  | -		if (strcmp(domain,"%") == 0)
 | ||||||
|  | -		    process_limit(pamh, LIMITS_DEF_ALL, ltype, item, value, ctrl,
 | ||||||
|  | -				  pl);
 | ||||||
|  | -		else if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) {
 | ||||||
|  | -		    strcpy(pl->login_group, domain+1);
 | ||||||
|  | -                    process_limit(pamh, LIMITS_DEF_ALLGROUP, ltype, item, value, ctrl,
 | ||||||
|  | -				  pl);
 | ||||||
|  |  		} | ||||||
|  | -            } else if (strcmp(domain, "*") == 0)
 | ||||||
|  | -                process_limit(pamh, LIMITS_DEF_DEFAULT, ltype, item, value, ctrl,
 | ||||||
|  | -			      pl);
 | ||||||
|  | +		switch(rngtype) {
 | ||||||
|  | +		    case LIMIT_RANGE_NONE:
 | ||||||
|  | +			if (strcmp(domain,"%") == 0)
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_ALL, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +			else if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) {
 | ||||||
|  | +			    strcpy(pl->login_group, domain+1);
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_ALLGROUP, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +			}
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_ONE:
 | ||||||
|  | +			if (pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid)) {
 | ||||||
|  | +			    struct group *grp;
 | ||||||
|  | +			    grp = pam_modutil_getgrgid(pamh, (gid_t)max_uid);
 | ||||||
|  | +			    strncpy(pl->login_group, grp->gr_name, sizeof(pl->login_group));
 | ||||||
|  | +			    pl->login_group[sizeof(pl->login_group)-1] = '\0';
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_ALLGROUP, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +			}
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_MIN:
 | ||||||
|  | +		    case LIMIT_RANGE_MM:
 | ||||||
|  | +			pam_syslog(pamh, LOG_WARNING, "range unsupported for %%group matching - ignored");
 | ||||||
|  | +		}
 | ||||||
|  | +            } else {
 | ||||||
|  | +		switch(rngtype) {
 | ||||||
|  | +		    case LIMIT_RANGE_NONE:
 | ||||||
|  | +			if (strcmp(domain, "*") == 0)
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_DEFAULT, ltype, item, value, ctrl,
 | ||||||
|  | +					  pl);
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_ONE:
 | ||||||
|  | +			if (uid != max_uid)
 | ||||||
|  | +			    break;
 | ||||||
|  | +			/* fallthrough */
 | ||||||
|  | +		    case LIMIT_RANGE_MM:
 | ||||||
|  | +			if (uid > max_uid)
 | ||||||
|  | +			    break;
 | ||||||
|  | +			/* fallthrough */
 | ||||||
|  | +		    case LIMIT_RANGE_MIN:
 | ||||||
|  | +			if (uid >= min_uid)
 | ||||||
|  | +			    process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl);
 | ||||||
|  | +		}
 | ||||||
|  | +	    }
 | ||||||
|  |  	} else if (i == 2 && ltype[0] == '-') { /* Probably a no-limit line */ | ||||||
|  |  	    if (strcmp(uname, domain) == 0) { | ||||||
|  |  		if (ctrl & PAM_DEBUG_ARG) { | ||||||
|  |  		    pam_syslog(pamh, LOG_DEBUG, "no limits for '%s'", uname); | ||||||
|  |  		} | ||||||
|  | -		fclose(fil);
 | ||||||
|  | -		return PAM_IGNORE;
 | ||||||
|  | -	    } else if (domain[0] == '@' && pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) {
 | ||||||
|  | +	    } else if (domain[0] == '@') {
 | ||||||
|  | +		switch(rngtype) {
 | ||||||
|  | +		    case LIMIT_RANGE_NONE:
 | ||||||
|  | +			if (!pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1))
 | ||||||
|  | +			    continue; /* next line */
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_ONE:
 | ||||||
|  | +			if (!pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid))
 | ||||||
|  | +			    continue; /* next line */
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_MM:
 | ||||||
|  | +			if (gid > (gid_t)max_uid)
 | ||||||
|  | +			    continue;  /* next line */
 | ||||||
|  | +			/* fallthrough */
 | ||||||
|  | +		    case LIMIT_RANGE_MIN:
 | ||||||
|  | +			if (gid < (gid_t)min_uid)
 | ||||||
|  | +			    continue;  /* next line */
 | ||||||
|  | +		}
 | ||||||
|  |  		if (ctrl & PAM_DEBUG_ARG) { | ||||||
|  |  		    pam_syslog(pamh, LOG_DEBUG, | ||||||
|  |  			       "no limits for '%s' in group '%s'", | ||||||
|  |  			       uname, domain+1); | ||||||
|  |  		} | ||||||
|  | -		fclose(fil);
 | ||||||
|  | -		return PAM_IGNORE;
 | ||||||
|  | +	    } else {
 | ||||||
|  | +		switch(rngtype) {
 | ||||||
|  | +		    case LIMIT_RANGE_NONE:
 | ||||||
|  | +			continue;  /* next line */
 | ||||||
|  | +		    case LIMIT_RANGE_ONE:
 | ||||||
|  | +			if (uid != max_uid)
 | ||||||
|  | +			    continue;  /* next line */
 | ||||||
|  | +			break;
 | ||||||
|  | +		    case LIMIT_RANGE_MM:
 | ||||||
|  | +			if (uid > max_uid)
 | ||||||
|  | +			    continue;  /* next line */
 | ||||||
|  | +			/* fallthrough */
 | ||||||
|  | +		    case LIMIT_RANGE_MIN:
 | ||||||
|  | +			if (uid >= min_uid)
 | ||||||
|  | +			    break;
 | ||||||
|  | +			continue;  /* next line */
 | ||||||
|  | +		}
 | ||||||
|  | +		if (ctrl & PAM_DEBUG_ARG) {
 | ||||||
|  | +		    pam_syslog(pamh, LOG_DEBUG, "no limits for '%s'", uname);
 | ||||||
|  | +		}
 | ||||||
|  |  	    } | ||||||
|  | +	    fclose(fil);
 | ||||||
|  | +	    return PAM_IGNORE;
 | ||||||
|  |          } else { | ||||||
|  |              pam_syslog(pamh, LOG_WARNING, "invalid line '%s' - skipped", line); | ||||||
|  |  	} | ||||||
|  | @@ -731,7 +879,7 @@ pam_sm_open_session (pam_handle_t *pamh,
 | ||||||
|  |          return PAM_ABORT; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -    retval = parse_config_file(pamh, pwd->pw_name, ctrl, pl);
 | ||||||
|  | +    retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl);
 | ||||||
|  |      if (retval == PAM_IGNORE) { | ||||||
|  |  	D(("the configuration file ('%s') has an applicable '<domain> -' entry", CONF_FILE)); | ||||||
|  |  	return PAM_SUCCESS; | ||||||
|  | @@ -755,7 +903,7 @@ pam_sm_open_session (pam_handle_t *pamh,
 | ||||||
|  |  	/* Parse the *.conf files. */ | ||||||
|  |  	for (i = 0; globbuf.gl_pathv[i] != NULL; i++) { | ||||||
|  |  	    pl->conf_file = globbuf.gl_pathv[i]; | ||||||
|  | -    	    retval = parse_config_file(pamh, pwd->pw_name, ctrl, pl);
 | ||||||
|  | +    	    retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl);
 | ||||||
|  |      	    if (retval == PAM_IGNORE) { | ||||||
|  |  		D(("the configuration file ('%s') has an applicable '<domain> -' entry", pl->conf_file)); | ||||||
|  |  		globfree(&globbuf); | ||||||
							
								
								
									
										54
									
								
								pam-1.1.3-pwhistory-incomplete.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								pam-1.1.3-pwhistory-incomplete.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | diff -up Linux-PAM-1.1.3/modules/pam_pwhistory/pam_pwhistory.c.incomplete Linux-PAM-1.1.3/modules/pam_pwhistory/pam_pwhistory.c
 | ||||||
|  | --- Linux-PAM-1.1.3/modules/pam_pwhistory/pam_pwhistory.c.incomplete	2008-12-18 14:09:36.000000000 +0100
 | ||||||
|  | +++ Linux-PAM-1.1.3/modules/pam_pwhistory/pam_pwhistory.c	2010-11-11 14:45:02.000000000 +0100
 | ||||||
|  | @@ -187,12 +187,13 @@ pam_sm_chauthtok (pam_handle_t *pamh, in
 | ||||||
|  |      { | ||||||
|  |        retval = pam_get_authtok (pamh, PAM_AUTHTOK, &newpass, NULL); | ||||||
|  |        if (retval != PAM_SUCCESS && retval != PAM_TRY_AGAIN) | ||||||
|  | -	return retval;
 | ||||||
|  | +	{
 | ||||||
|  | +	  if (retval == PAM_CONV_AGAIN)
 | ||||||
|  | +	    retval = PAM_INCOMPLETE;
 | ||||||
|  | +	  return retval;
 | ||||||
|  | +	}
 | ||||||
|  |        tries++; | ||||||
|  |   | ||||||
|  | -      if (newpass == NULL || retval == PAM_TRY_AGAIN)
 | ||||||
|  | -	continue;
 | ||||||
|  | -
 | ||||||
|  |        if (options.debug) | ||||||
|  |  	{ | ||||||
|  |  	  if (newpass) | ||||||
|  | @@ -201,12 +202,8 @@ pam_sm_chauthtok (pam_handle_t *pamh, in
 | ||||||
|  |  	    pam_syslog (pamh, LOG_DEBUG, "got no auth token"); | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -      if (retval != PAM_SUCCESS || newpass == NULL)
 | ||||||
|  | -	{
 | ||||||
|  | -	  if (retval == PAM_CONV_AGAIN)
 | ||||||
|  | -	    retval = PAM_INCOMPLETE;
 | ||||||
|  | -	  return retval;
 | ||||||
|  | -	}
 | ||||||
|  | +      if (newpass == NULL || retval == PAM_TRY_AGAIN)
 | ||||||
|  | +	continue;
 | ||||||
|  |   | ||||||
|  |        if (options.debug) | ||||||
|  |  	pam_syslog (pamh, LOG_DEBUG, "check against old password file"); | ||||||
|  | @@ -219,7 +216,6 @@ pam_sm_chauthtok (pam_handle_t *pamh, in
 | ||||||
|  |  	  newpass = NULL; | ||||||
|  |  	  /* Remove password item, else following module will use it */ | ||||||
|  |            pam_set_item (pamh, PAM_AUTHTOK, (void *) NULL); | ||||||
|  | -	  continue;
 | ||||||
|  |  	} | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | @@ -230,8 +226,7 @@ pam_sm_chauthtok (pam_handle_t *pamh, in
 | ||||||
|  |        return PAM_MAXTRIES; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -  /* Remember new password */
 | ||||||
|  | -  return pam_set_item (pamh, PAM_AUTHTOK, newpass);
 | ||||||
|  | +  return PAM_SUCCESS;
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |   | ||||||
							
								
								
									
										16
									
								
								pam.spec
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								pam.spec
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ | |||||||
| Summary: An extensible library which provides authentication for applications | Summary: An extensible library which provides authentication for applications | ||||||
| Name: pam | Name: pam | ||||||
| Version: 1.1.3 | Version: 1.1.3 | ||||||
| Release: 5%{?dist} | Release: 6%{?dist} | ||||||
| # The library is BSD licensed with option to relicense as GPLv2+ - this option is redundant | # The library is BSD licensed with option to relicense as GPLv2+ - this option is redundant | ||||||
| # as the BSD license allows that anyway. pam_timestamp and pam_console modules are GPLv2+, | # as the BSD license allows that anyway. pam_timestamp and pam_console modules are GPLv2+, | ||||||
| License: BSD and GPLv2+ | License: BSD and GPLv2+ | ||||||
| @ -32,7 +32,11 @@ Patch9:  pam-1.1.2-noflex.patch | |||||||
| Patch10: pam-1.1.3-nouserenv.patch | Patch10: pam-1.1.3-nouserenv.patch | ||||||
| Patch11: pam-1.1.3-console-abstract.patch | Patch11: pam-1.1.3-console-abstract.patch | ||||||
| Patch12: pam-1.1.3-faillock-screensaver.patch | Patch12: pam-1.1.3-faillock-screensaver.patch | ||||||
| Patch13: pam-1.1.3-securetty-console.patch | # Upstreamed patches | ||||||
|  | Patch30: pam-1.1.3-securetty-console.patch | ||||||
|  | Patch31: pam-1.1.3-limits-nosetreuid.patch | ||||||
|  | Patch32: pam-1.1.3-limits-range.patch | ||||||
|  | Patch33: pam-1.1.3-pwhistory-incomplete.patch | ||||||
| 
 | 
 | ||||||
| %define _sbindir /sbin | %define _sbindir /sbin | ||||||
| %define _moduledir /%{_lib}/security | %define _moduledir /%{_lib}/security | ||||||
| @ -103,7 +107,10 @@ mv pam-redhat-%{pam_redhat_version}/* modules | |||||||
| %patch10 -p1 -b .nouserenv | %patch10 -p1 -b .nouserenv | ||||||
| %patch11 -p1 -b .abstract | %patch11 -p1 -b .abstract | ||||||
| %patch12 -p1 -b .screensaver | %patch12 -p1 -b .screensaver | ||||||
| %patch13 -p0 -b .console | %patch30 -p0 -b .console | ||||||
|  | %patch31 -p1 -b .nosetreuid | ||||||
|  | %patch32 -p0 -b .range | ||||||
|  | %patch33 -p1 -b .incomplete | ||||||
| 
 | 
 | ||||||
| libtoolize -f | libtoolize -f | ||||||
| autoreconf | autoreconf | ||||||
| @ -352,6 +359,9 @@ fi | |||||||
| %doc doc/adg/*.txt doc/adg/html | %doc doc/adg/*.txt doc/adg/html | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Dec 14 2010 Tomas Mraz <tmraz@redhat.com> 1.1.3-6 | ||||||
|  | - include patches recently submitted and applied to upstream CVS | ||||||
|  | 
 | ||||||
| * Thu Nov 25 2010 Tomas Mraz <tmraz@redhat.com> 1.1.3-5 | * Thu Nov 25 2010 Tomas Mraz <tmraz@redhat.com> 1.1.3-5 | ||||||
| - add config for autocreation of subdirectories in /var/run (#656655) | - add config for autocreation of subdirectories in /var/run (#656655) | ||||||
| - automatically enable kernel console in pam_securetty | - automatically enable kernel console in pam_securetty | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user