+2010-02-22 Todd C. Miller <Todd.Miller@courtesan.com>
+
+ * match.c: Check for pseudo-command by looking at the first
+ character of the command in sudoers instead of checking the
+ user-supplied command for a slash.
+
+2010-02-09 Todd C. Miller <Todd.Miller@courtesan.com>
+
+ * toke.l: Fix size arg when realloc()ing include stack.
+ From Daniel Kopecek
+
+ * toke.l: Avoid a duplicate fclose() of the sudoers file.
+
+2010-02-06 Todd C. Miller <Todd.Miller@courtesan.com>
+
+ * aix.c, config.h.in, configure, configure.in: Use setrlimit64(),
+ if available, instead of setrlimit() when setting AIX resource
+ limits since rlim_t is 32bits.
+
+ * logging.c: Fix use after free when sending error messages.
+ From Timo Juhani Lindfors
+
+2009-12-17 15:02 millert
+
+ * parse.c: Fix printing of entries with multiple host entries on
+ a single line.
+
+2009-12-09 16:05 millert
+
+ * logging.c: fix typo in last commit
+
+2009-12-08 22:19 millert
+
+ * logging.c: Convert fmt_first and fmt_confd into macros.
+
2009-11-23 10:56 millert
* match.c: cmnd_matches() already deals with negation so
Sudo is distributed under the following ISC-style license:
- Copyright (c) 1994-1996, 1998-2009
+ Copyright (c) 1994-1996, 1998-2010
Todd C. Miller <Todd.Miller@courtesan.com>
Permission to use, copy, modify, and distribute this software for any
#ifdef HAVE_GETUSERATTR
+#ifndef HAVE_SETRLIMIT64
+# define setrlimit64(a, b) setrlimit(a, b)
+# define rlimit64 rlimit
+# define rlim64_t rlim_t
+# define RLIM64_INFINITY RLIM_INFINITY
+#endif /* HAVE_SETRLIMIT64 */
+
#ifndef RLIM_SAVED_MAX
-# define RLIM_SAVED_MAX RLIM_INFINITY
+# define RLIM_SAVED_MAX RLIM64_INFINITY
#endif
struct aix_limit {
aix_getlimit(user, lim, valp)
char *user;
char *lim;
- int *valp;
+ rlim64_t *valp;
{
- if (getuserattr(user, lim, valp, SEC_INT) != 0)
- return getuserattr("default", lim, valp, SEC_INT);
+ int val;
+
+ if (getuserattr(user, lim, &val, SEC_INT) != 0 &&
+ getuserattr("default", lim, &val, SEC_INT) != 0) {
+ return(-1);
+ }
+ *valp = val;
return(0);
}
aix_setlimits(user)
char *user;
{
- struct rlimit rlim;
- int i, n;
+ struct rlimit64 rlim;
+ rlim64_t val;
+ int n;
/*
* For each resource limit, get the soft/hard values for the user
- * and set those values via setrlimit(). Must be run as euid 0.
+ * and set those values via setrlimit64(). Must be run as euid 0.
*/
for (n = 0; n < sizeof(aix_limits) / sizeof(aix_limits[0]); n++) {
/*
* We have two strategies, depending on whether or not the
* hard limit has been defined.
*/
- if (aix_getlimit(user, aix_limits[n].hard, &i) == 0) {
- rlim.rlim_max = i == -1 ? RLIM_INFINITY : i * aix_limits[n].factor;
- if (aix_getlimit(user, aix_limits[n].soft, &i) == 0)
- rlim.rlim_cur = i == -1 ? RLIM_INFINITY : i * aix_limits[n].factor;
+ if (aix_getlimit(user, aix_limits[n].hard, &val) == 0) {
+ rlim.rlim_max = val == -1 ? RLIM64_INFINITY : val * aix_limits[n].factor;
+ if (aix_getlimit(user, aix_limits[n].soft, &val) == 0)
+ rlim.rlim_cur = val == -1 ? RLIM64_INFINITY : val * aix_limits[n].factor;
else
rlim.rlim_cur = rlim.rlim_max; /* soft not specd, use hard */
} else {
/* No hard limit set, try soft limit. */
- if (aix_getlimit(user, aix_limits[n].soft, &i) == 0)
- rlim.rlim_cur = i == -1 ? RLIM_INFINITY : i * aix_limits[n].factor;
+ if (aix_getlimit(user, aix_limits[n].soft, &val) == 0)
+ rlim.rlim_cur = val == -1 ? RLIM64_INFINITY : val * aix_limits[n].factor;
/* Set hard limit per AIX /etc/security/limits documentation. */
switch (aix_limits[n].resource) {
rlim.rlim_max = RLIM_SAVED_MAX;
break;
default:
- rlim.rlim_max = RLIM_INFINITY;
+ rlim.rlim_max = RLIM64_INFINITY;
break;
}
}
- (void)setrlimit(aix_limits[n].resource, &rlim);
+ (void)setrlimit64(aix_limits[n].resource, &rlim);
}
}
/* Define to 1 if you have the `setrlimit' function. */
#undef HAVE_SETRLIMIT
+/* Define to 1 if you have the `setrlimit64' function. */
+#undef HAVE_SETRLIMIT64
+
/* Define to 1 if you have the `setsid' function. */
#undef HAVE_SETSID
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for sudo 1.7.2p2.
+# Generated by GNU Autoconf 2.61 for sudo 1.7.2p5.
#
# Report bugs to <http://www.sudo.ws/bugs/>.
#
# Identity of this package.
PACKAGE_NAME='sudo'
PACKAGE_TARNAME='sudo'
-PACKAGE_VERSION='1.7.2p2'
-PACKAGE_STRING='sudo 1.7.2p2'
+PACKAGE_VERSION='1.7.2p5'
+PACKAGE_STRING='sudo 1.7.2p5'
PACKAGE_BUGREPORT='http://www.sudo.ws/bugs/'
# Factoring default headers for most tests.
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures sudo 1.7.2p2 to adapt to many kinds of systems.
+\`configure' configures sudo 1.7.2p5 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sudo 1.7.2p2:";;
+ short | recursive ) echo "Configuration of sudo 1.7.2p5:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sudo configure 1.7.2p2
+sudo configure 1.7.2p5
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sudo $as_me 1.7.2p2, which was
+It was created by sudo $as_me 1.7.2p5, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
for ac_func in strchr strrchr memchr memcpy memset sysconf tzset \
strftime setrlimit initgroups getgroups fstat gettimeofday \
- setlocale getaddrinfo setsid setenv
+ setlocale getaddrinfo setsid setenv setrlimit64
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sudo $as_me 1.7.2p2, which was
+This file was extended by sudo $as_me 1.7.2p5, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-sudo config.status 1.7.2p2
+sudo config.status 1.7.2p5
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
dnl Process this file with GNU autoconf to produce a configure script.
dnl $Sudo: configure.in,v 1.549 2009/06/13 20:52:50 millert Exp $
dnl
-dnl Copyright (c) 1994-1996,1998-2009 Todd C. Miller <Todd.Miller@courtesan.com>
+dnl Copyright (c) 1994-1996,1998-2010 Todd C. Miller <Todd.Miller@courtesan.com>
dnl
-AC_INIT([sudo], [1.7.2p2], [http://www.sudo.ws/bugs/], [sudo])
+AC_INIT([sudo], [1.7.2p5], [http://www.sudo.ws/bugs/], [sudo])
AC_CONFIG_HEADER(config.h pathnames.h)
dnl
dnl This won't work before AC_INIT
AC_FUNC_GETGROUPS
AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \
strftime setrlimit initgroups getgroups fstat gettimeofday \
- setlocale getaddrinfo setsid setenv)
+ setlocale getaddrinfo setsid setenv setrlimit64)
AC_CHECK_FUNCS(unsetenv, SUDO_FUNC_UNSETENV_VOID)
SUDO_FUNC_PUTENV_CONST
if test -z "$SKIP_SETRESUID"; then
closelog();
}
+#define FMT_FIRST "%8s : %s"
+#define FMT_CONTD "%8s : (command continued) %s"
+
/*
* Log a message to syslog, pre-pending the username and splitting the
* message into parts if it is longer than MAXSYSLOGLEN.
size_t len, maxlen;
char *p, *tmp, save;
const char *fmt;
- const char *fmt_first = "%8s : %s";
- const char *fmt_contd = "%8s : (command continued) %s";
/*
* Log the full line, breaking into multiple syslog(3) calls if necessary
*/
- fmt = fmt_first;
- maxlen = MAXSYSLOGLEN - (sizeof(fmt_first) - 6 + strlen(user_name));
+ fmt = FMT_FIRST;
+ maxlen = MAXSYSLOGLEN - (sizeof(FMT_FIRST) - 6 + strlen(user_name));
for (p = msg; *p != '\0'; ) {
len = strlen(p);
if (len > maxlen) {
mysyslog(pri, fmt, user_name, p);
p += len;
}
- fmt = fmt_contd;
- maxlen = MAXSYSLOGLEN - (sizeof(fmt_contd) - 6 + strlen(user_name));
+ fmt = FMT_CONTD;
+ maxlen = MAXSYSLOGLEN - (sizeof(FMT_CONTD) - 6 + strlen(user_name));
}
}
else
warningx("%s", message);
}
- efree(message);
+ if (logline != message)
+ efree(message);
/*
* Send a copy of the error via mail.
if (def_logfile)
do_logfile(logline);
- if (logline != message)
- efree(logline);
+ efree(logline);
if (!ISSET(flags, NO_EXIT)) {
cleanup(0);
char *sudoers_args;
{
/* Check for pseudo-commands */
- if (strchr(user_cmnd, '/') == NULL) {
+ if (sudoers_cmnd[0] != '/') {
/*
* Return true if both sudoers_cmnd and user_cmnd are "sudoedit" AND
* a) there are no args in sudoers OR
int nfound = 0;
tq_foreach_fwd(&us->privileges, priv) {
+ if (hostlist_matches(&priv->hostlist) != ALLOW)
+ continue;
tags.noexec = UNSPEC;
tags.setenv = UNSPEC;
tags.nopasswd = UNSPEC;
int nfound = 0;
tq_foreach_fwd(&us->privileges, priv) {
+ if (hostlist_matches(&priv->hostlist) != ALLOW)
+ continue;
tags.noexec = UNSPEC;
tags.setenv = UNSPEC;
tags.nopasswd = UNSPEC;
return(-1);
tq_foreach_fwd(&userspecs, us) {
- /* XXX - why only check the first privilege here? */
- if (userlist_matches(pw, &us->users) != ALLOW ||
- hostlist_matches(&us->privileges.first->hostlist) != ALLOW)
+ if (userlist_matches(pw, &us->users) != ALLOW)
continue;
if (long_list)
-1.7.2p2 November 24, 2009 1
+1.7.2p5 February 22, 2010 1
-1.7.2p2 November 24, 2009 2
+1.7.2p5 February 22, 2010 2
-1.7.2p2 November 24, 2009 3
+1.7.2p5 February 22, 2010 3
-1.7.2p2 November 24, 2009 4
+1.7.2p5 February 22, 2010 4
-1.7.2p2 November 24, 2009 5
+1.7.2p5 February 22, 2010 5
-1.7.2p2 November 24, 2009 6
+1.7.2p5 February 22, 2010 6
-1.7.2p2 November 24, 2009 7
+1.7.2p5 February 22, 2010 7
-1.7.2p2 November 24, 2009 8
+1.7.2p5 February 22, 2010 8
-1.7.2p2 November 24, 2009 9
+1.7.2p5 February 22, 2010 9
-1.7.2p2 November 24, 2009 10
+1.7.2p5 February 22, 2010 10
.\" ========================================================================
.\"
.IX Title "SUDO @mansectsu@"
-.TH SUDO @mansectsu@ "November 24, 2009" "1.7.2p2" "MAINTENANCE COMMANDS"
+.TH SUDO @mansectsu@ "February 22, 2010" "1.7.2p5" "MAINTENANCE COMMANDS"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
-1.7.2p2 November 24, 2009 1
+1.7.2p5 February 22, 2010 1
-1.7.2p2 November 24, 2009 2
+1.7.2p5 February 22, 2010 2
-1.7.2p2 November 24, 2009 3
+1.7.2p5 February 22, 2010 3
-1.7.2p2 November 24, 2009 4
+1.7.2p5 February 22, 2010 4
-1.7.2p2 November 24, 2009 5
+1.7.2p5 February 22, 2010 5
-1.7.2p2 November 24, 2009 6
+1.7.2p5 February 22, 2010 6
-1.7.2p2 November 24, 2009 7
+1.7.2p5 February 22, 2010 7
-1.7.2p2 November 24, 2009 8
+1.7.2p5 February 22, 2010 8
-1.7.2p2 November 24, 2009 9
+1.7.2p5 February 22, 2010 9
-1.7.2p2 November 24, 2009 10
+1.7.2p5 February 22, 2010 10
-1.7.2p2 November 24, 2009 11
+1.7.2p5 February 22, 2010 11
-1.7.2p2 November 24, 2009 12
+1.7.2p5 February 22, 2010 12
-1.7.2p2 November 24, 2009 13
+1.7.2p5 February 22, 2010 13
-1.7.2p2 November 24, 2009 14
+1.7.2p5 February 22, 2010 14
-1.7.2p2 November 24, 2009 15
+1.7.2p5 February 22, 2010 15
-1.7.2p2 November 24, 2009 16
+1.7.2p5 February 22, 2010 16
-1.7.2p2 November 24, 2009 17
+1.7.2p5 February 22, 2010 17
-1.7.2p2 November 24, 2009 18
+1.7.2p5 February 22, 2010 18
-1.7.2p2 November 24, 2009 19
+1.7.2p5 February 22, 2010 19
-1.7.2p2 November 24, 2009 20
+1.7.2p5 February 22, 2010 20
-1.7.2p2 November 24, 2009 21
+1.7.2p5 February 22, 2010 21
-1.7.2p2 November 24, 2009 22
+1.7.2p5 February 22, 2010 22
-1.7.2p2 November 24, 2009 23
+1.7.2p5 February 22, 2010 23
-1.7.2p2 November 24, 2009 24
+1.7.2p5 February 22, 2010 24
-1.7.2p2 November 24, 2009 25
+1.7.2p5 February 22, 2010 25
-1.7.2p1 June 11, 2009 1
+1.7.2p5 February 22, 2010 1
-1.7.2p1 June 11, 2009 2
+1.7.2p5 February 22, 2010 2
-1.7.2p1 June 11, 2009 3
+1.7.2p5 February 22, 2010 3
-1.7.2p1 June 11, 2009 4
+1.7.2p5 February 22, 2010 4
-1.7.2p1 June 11, 2009 5
+1.7.2p5 February 22, 2010 5
-1.7.2p1 June 11, 2009 6
+1.7.2p5 February 22, 2010 6
-1.7.2p1 June 11, 2009 7
+1.7.2p5 February 22, 2010 7
-1.7.2p1 June 11, 2009 8
+1.7.2p5 February 22, 2010 8
-1.7.2p1 June 11, 2009 9
+1.7.2p5 February 22, 2010 9
-1.7.2p1 June 11, 2009 10
+1.7.2p5 February 22, 2010 10
-1.7.2p1 June 11, 2009 11
+1.7.2p5 February 22, 2010 11
-1.7.2p1 June 11, 2009 12
+1.7.2p5 February 22, 2010 12
.\" ========================================================================
.\"
.IX Title "SUDOERS.LDAP @mansectform@"
-.TH SUDOERS.LDAP @mansectform@ "June 11, 2009" "1.7.2p1" "MAINTENANCE COMMANDS"
+.TH SUDOERS.LDAP @mansectform@ "February 22, 2010" "1.7.2p5" "MAINTENANCE COMMANDS"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.\" ========================================================================
.\"
.IX Title "SUDOERS @mansectform@"
-.TH SUDOERS @mansectform@ "November 24, 2009" "1.7.2p2" "MAINTENANCE COMMANDS"
+.TH SUDOERS @mansectform@ "February 22, 2010" "1.7.2p5" "MAINTENANCE COMMANDS"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
- * $Header: /home/cvs/courtesan/sudo/toke.c,v 1.37 2009/07/18 13:55:37 millert Exp $
+ * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.10 2007/01/26 14:38:19 tsi Exp $
*/
#define FLEX_SCANNER
#include "parse.h"
#include <gram.h>
-#ifndef lint
-__unused static const char rcsid[] = "$Sudo: toke.c,v 1.37 2009/07/18 13:55:37 millert Exp $";
-#endif /* lint */
-
extern YYSTYPE yylval;
+extern int parse_error;
int sudolineno = 1;
char *sudoers;
static int sawspace = 0;
#define INSTR 5
-#line 1465 "lex.yy.c"
+#line 1462 "lex.yy.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 131 "toke.l"
+#line 128 "toke.l"
-#line 1621 "lex.yy.c"
+#line 1618 "lex.yy.c"
if ( yy_init )
{
case 1:
YY_RULE_SETUP
-#line 132 "toke.l"
+#line 129 "toke.l"
BEGIN STARTDEFS;
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 134 "toke.l"
+#line 131 "toke.l"
{
BEGIN INDEFS;
LEXTRACE("DEFVAR ");
case 3:
YY_RULE_SETUP
-#line 143 "toke.l"
+#line 140 "toke.l"
{
BEGIN STARTDEFS;
LEXTRACE(", ");
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 149 "toke.l"
+#line 146 "toke.l"
{
LEXTRACE("= ");
return('=');
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 154 "toke.l"
+#line 151 "toke.l"
{
LEXTRACE("+= ");
return('+');
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 159 "toke.l"
+#line 156 "toke.l"
{
LEXTRACE("-= ");
return('-');
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 164 "toke.l"
+#line 161 "toke.l"
{
LEXTRACE("BEGINSTR ");
yylval.string = NULL;
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 170 "toke.l"
+#line 167 "toke.l"
{
LEXTRACE("WORD(2) ");
if (!fill(yytext, yyleng))
case 9:
YY_RULE_SETUP
-#line 179 "toke.l"
+#line 176 "toke.l"
{
/* Line continuation char followed by newline. */
++sudolineno;
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 185 "toke.l"
+#line 182 "toke.l"
{
LEXTRACE("ENDSTR ");
BEGIN INDEFS;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 191 "toke.l"
+#line 188 "toke.l"
{
LEXTRACE("BACKSLASH ");
if (!append(yytext, yyleng))
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 197 "toke.l"
+#line 194 "toke.l"
{
LEXTRACE("STRBODY ");
if (!append(yytext, yyleng))
case 13:
YY_RULE_SETUP
-#line 205 "toke.l"
+#line 202 "toke.l"
{
/* quoted fnmatch glob char, pass verbatim */
LEXTRACE("QUOTEDCHAR ");
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 213 "toke.l"
+#line 210 "toke.l"
{
/* quoted sudoers special char, strip backslash */
LEXTRACE("QUOTEDCHAR ");
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 221 "toke.l"
+#line 218 "toke.l"
{
BEGIN INITIAL;
yyless(0);
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 227 "toke.l"
+#line 224 "toke.l"
{
LEXTRACE("ARG ");
if (!fill_args(yytext, yyleng, sawspace))
case 17:
YY_RULE_SETUP
-#line 235 "toke.l"
+#line 232 "toke.l"
{
char *path;
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 248 "toke.l"
+#line 245 "toke.l"
{
char *path;
LEXTRACE("INCLUDEDIR\n");
- /* Push current buffer and switch to include file */
- if (!push_includedir(path))
+ /*
+ * Push current buffer and switch to include file.
+ * We simply ignore empty directories.
+ */
+ if (!push_includedir(path) && parse_error)
yyterminate();
}
YY_BREAK
if (!(dir = opendir(dirpath))) {
yyerror(dirpath);
- return(FALSE);
+ return(NULL);
}
while ((dent = readdir(dir))) {
/* Ignore files that end in '~' or have a '.' in them. */
efree(pl);
}
efree(istack[idepth].path);
- if (!istack[idepth].keepopen)
+ if (idepth && !istack[idepth].keepopen)
fclose(istack[idepth].bs->yy_input_file);
yy_delete_buffer(istack[idepth].bs);
}
}
istacksize += SUDOERS_STACK_INCREMENT;
istack = (struct include_stack *) realloc(istack,
- sizeof(istack) * istacksize);
+ sizeof(*istack) * istacksize);
if (istack == NULL) {
yyerror("unable to allocate memory");
return(FALSE);
}
if (isdir) {
if (!(path = switch_dir(&istack[idepth], path))) {
- yyerror(path);
+ /* switch_dir() called yyerror() for us */
return(FALSE);
}
if ((fp = open_sudoers(path, FALSE, &keepopen)) == NULL) {
yyerror(path);
- return(FALSE); /* XXX - just to go next one? */
+ return(FALSE); /* XXX - just to go next one */
}
} else {
if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) {
istack[idepth - 1].more = pl->next;
if ((fp = open_sudoers(pl->path, FALSE, &keepopen)) == NULL) {
yyerror(pl->path);
- return(FALSE); /* XXX - just to go next one? */
+ return(FALSE); /* XXX - just to go next one */
}
efree(sudoers);
sudoers = pl->path;
#include "parse.h"
#include <gram.h>
-#ifndef lint
-__unused static const char rcsid[] = "$Sudo: toke.l,v 1.40 2009/11/22 14:54:04 millert Exp $";
-#endif /* lint */
-
extern YYSTYPE yylval;
extern int parse_error;
int sudolineno = 1;
efree(pl);
}
efree(istack[idepth].path);
- if (!istack[idepth].keepopen)
+ if (idepth && !istack[idepth].keepopen)
fclose(istack[idepth].bs->yy_input_file);
yy_delete_buffer(istack[idepth].bs);
}
}
istacksize += SUDOERS_STACK_INCREMENT;
istack = (struct include_stack *) realloc(istack,
- sizeof(istack) * istacksize);
+ sizeof(*istack) * istacksize);
if (istack == NULL) {
yyerror("unable to allocate memory");
return(FALSE);
-1.7.2p1 June 11, 2009 1
+1.7.2p5 February 22, 2010 1
-1.7.2p1 June 11, 2009 2
+1.7.2p5 February 22, 2010 2
-1.7.2p1 June 11, 2009 3
+1.7.2p5 February 22, 2010 3
.\" ========================================================================
.\"
.IX Title "VISUDO @mansectsu@"
-.TH VISUDO @mansectsu@ "June 11, 2009" "1.7.2p1" "MAINTENANCE COMMANDS"
+.TH VISUDO @mansectsu@ "February 22, 2010" "1.7.2p5" "MAINTENANCE COMMANDS"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l