OBS User unknown 2007-10-02 23:02:00 +00:00 committed by Git OBS Bridge
parent 9c09ca6f4d
commit 9df98390b4
13 changed files with 415 additions and 21 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4c2c5bcb261bfac49cb736056630f20eb0fbc98492b2487085fd5283e87aecdc
size 258521

3
INIT.2007-06-28.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b6ea117003ec4535012a4a3139fbb746e0ad54c57ef6ba5cf662f46d797a9f60
size 259047

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63fc059d37cd3e2e797efc414d90e63a89726c027ad438a3e3494237aba7b1d3
size 1306654

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0d9c8d632c2959bd1736fe47fd6825c255e1bda2df238a64518c22456ce9711b
size 1316142

View File

@ -1,3 +1,43 @@
-------------------------------------------------------------------
Mon Sep 17 13:16:53 CEST 2007 - werner@suse.de
- Update to bugfix version 2007-06-28 of ksh93s+ (bug #263053)
* In vi insert mode, ksh no longer emits a backspace character
before the carriage return when the newline is entered
* A bug in which pipefail would cause a command to return 0
when the pipeline was the last command and the failure
happened on a component other than the last has been fixed
* A bug in the expansion of ${var/pattern/rep} when pattern
or rep contained a left parenthesis in single quotes has
been fixed
* The braces for a subscripted variable with ${var[sub]} are
now optional when inside [[...]], ((...)) or as a subscript
* A bug in brace expansion in which single and double quotes
did not treat the comma as a literal character has been fixed
* The -p option of whence now disables -v
* Several bug fixes in compound variables and arrays of arrays
have been made
* A bug in which the %B format of printf was affected by the
locale has been fixed
* A bug in which \ was not removed in the replacement pattern
with ${var/pattern/rep} when it was not followed by \ or a
digit has been fixed
* A bug in which ksh -R file core dumped if no script was
specified has been fixed, it now displays an error message
* Added additional Solaris signals to signal table
* A bug in which a pipeline with command substitution inside
a function could cause a pipeline that invokes this function
to hang when the pipefail option is on has been fixed
* Added -q to whence
* A small memory leak with each redirection of a non-builtin
has been fixed
- Fix many wrong detected limits for Linux like INT_MAX
- Adapt FS3D file system: mount(2) of Linux uses five arguments
- Fix bug in pointer arithmetic: after reallocation the addresses
of the old area of an pointer array are changed (bug #300653)
- Overflow in keytrap(): strncpy(3) does not append ASCII 0 if
buffer is fully used
-------------------------------------------------------------------
Wed Jun 20 15:15:28 CEST 2007 - werner@suse.de

View File

@ -12,17 +12,17 @@
Name: ksh
BuildRequires: bind-libs bind-utils bison flex gdbm-devel glibc-devel libbz2-devel ncurses-devel procps psmisc pwdutils zlib-devel
URL: http://www.research.att.com/~gsf/download/
Url: http://www.research.att.com/~gsf/download/
License: Common Public License Version 1.0 (CPL1.0)
Group: System/Shells
PreReq: /bin/ln /etc/bash.bashrc /bin/true
Autoreqprov: on
AutoReqProv: on
Version: 93s
Release: 24
Release: 49
Summary: Korn Shell
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: INIT.2007-03-28.tar.bz2
Source1: ast-ksh.2007-03-28.tar.bz2
Source: INIT.2007-06-28.tar.bz2
Source1: ast-ksh.2007-06-28.tar.bz2
Source2: Agreement
Source3: Warning
Source30: rpmlintrc
@ -37,6 +37,10 @@ Patch7: ksh93-profile.dif
Patch8: ksh93-test.dif
Patch9: ksh93-compat.dif
Patch10: ksh93-suid_exec.dif
Patch11: ksh93s-fix.dif
Patch12: ksh93-fs3d.dif
Patch13: ksh93-realloc.dif
Patch14: ksh93-keytrap-overflow.dif
%description
The original Korn Shell. The ksh is an sh-compatible command
@ -55,7 +59,7 @@ Authors:
Summary: Korn Shell development environment
Group: Development/Libraries/C and C++
Requires: ksh = %{version}-%{release}
Autoreqprov: on
AutoReqProv: on
%description -n ksh-devel
The package includes C header files and the static libraries together
@ -86,6 +90,10 @@ Authors:
%patch8
%patch9
%patch10
%patch11
%patch12
%patch13
%patch14
%build
#
@ -95,9 +103,12 @@ Authors:
IGNORE="-Wno-missing-braces -Wno-unknown-pragmas -Wno-parentheses"
IGNORE="$IGNORE -Wno-char-subscripts -Wno-uninitialized -Wno-implicit"
#
# Do not use -DSHOPT_SPAWN=1 and/or -DSHOPT_AMP=1 this would cause
# errors due race conditions while executing the test suite.
#
FEATURE="-DSHOPT_SYSRC=1 -DSHOPT_REMOTE=1 -DSHOPT_CMDLIB_BLTIN=1"
FEATURE="$FEATURE -DSH_CMDLIB_DIR=\\\"/%{_lib}/ast/bin\\\" -DDEFSHELL=\\\"/bin/ksh\\\""
FEATURE="$FEATURE -DSH_CMDLIB_DIR=\\\"/%{_lib}/ast/bin\\\""
FEATURE="$FEATURE -DDEFSHELL=\\\"/bin/ksh\\\""
FEATURE="$FEATURE -DTHISPROG=\\\"/%{_lib}/ast/bin/suid_exec\\\""
#
#
@ -170,7 +181,7 @@ Authors:
${suidex} -Wl,-rpath-link,${root}/lib -Wl,-rpath,/%{_lib}/ast
pushd ${test}
sleep 5
LD_LIBRARY_PATH=${root}/lib SHELL=${root}/bin/ksh ${root}/bin/ksh shtests
LD_LIBRARY_PATH=${root}/lib SHELL=${root}/bin/ksh ${root}/bin/ksh shtests
popd
pushd ${root}/bin
set -- $(LD_LIBRARY_PATH=${root}/lib PATH=$PATH:. shcomp --version 2>&1)
@ -276,8 +287,44 @@ fi
%{_libdir}/ast/*.a
%doc %{_mandir}/man3/*
%{_includedir}/ast/
%changelog
* Mon Sep 17 2007 - werner@suse.de
- Update to bugfix version 2007-06-28 of ksh93s+ (bug #263053)
* In vi insert mode, ksh no longer emits a backspace character
before the carriage return when the newline is entered
* A bug in which pipefail would cause a command to return 0
when the pipeline was the last command and the failure
happened on a component other than the last has been fixed
* A bug in the expansion of ${var/pattern/rep} when pattern
or rep contained a left parenthesis in single quotes has
been fixed
* The braces for a subscripted variable with ${var[sub]} are
now optional when inside [[...]], ((...)) or as a subscript
* A bug in brace expansion in which single and double quotes
did not treat the comma as a literal character has been fixed
* The -p option of whence now disables -v
* Several bug fixes in compound variables and arrays of arrays
have been made
* A bug in which the %%B format of printf was affected by the
locale has been fixed
* A bug in which \ was not removed in the replacement pattern
with ${var/pattern/rep} when it was not followed by \ or a
digit has been fixed
* A bug in which ksh -R file core dumped if no script was
specified has been fixed, it now displays an error message
* Added additional Solaris signals to signal table
* A bug in which a pipeline with command substitution inside
a function could cause a pipeline that invokes this function
to hang when the pipefail option is on has been fixed
* Added -q to whence
* A small memory leak with each redirection of a non-builtin
has been fixed
- Fix many wrong detected limits for Linux like INT_MAX
- Adapt FS3D file system: mount(2) of Linux uses five arguments
- Fix bug in pointer arithmetic: after reallocation the addresses
of the old area of an pointer array are changed (bug #300653)
- Overflow in keytrap(): strncpy(3) does not append ASCII 0 if
buffer is fully used
* Wed Jun 20 2007 - werner@suse.de
- Fix pointer arithmetics within sh_trim() (bug #284611)
* Tue Jun 19 2007 - werner@suse.de

28
ksh93-fs3d.dif Normal file
View File

@ -0,0 +1,28 @@
--- src/lib/libast/misc/fs3d.c
+++ src/lib/libast/misc/fs3d.c 2007-09-13 18:28:57.279134727 +0200
@@ -47,7 +47,8 @@
/*
* get the current setting
*/
-
+ if (getenv("LD_PRELOAD") == (char*)0)
+ goto nope;
if (!fsview && mount("", "", 0, NiL))
goto nope;
if (FS3D_op(op) == FS3D_OP_INIT && mount(FS3D_init, NiL, FS3D_VIEW, NiL))
--- src/lib/libast/include/fs3d.h
+++ src/lib/libast/include/fs3d.h 2007-09-13 18:28:57.279134727 +0200
@@ -95,7 +95,13 @@
#define FS3D_SIZE(n) ((n)<<4)
#define FS3D_SIZEOF(n) ((n)>>4)
+#if _sys_mount && defined(__linux__)
+#include <sys/mount.h>
+#define mount(source,target,flags,data) \
+ mount((source),(target),"",(flags),(data))
+#else
extern int mount(const char*, char*, int, void*);
+#endif
#if _BLD_ast && defined(__EXPORT__)
#define extern __EXPORT__

View File

@ -0,0 +1,19 @@
--- src/cmd/ksh93/edit/edit.c
+++ src/cmd/ksh93/edit/edit.c 2007-09-16 23:57:45.000000000 +0200
@@ -1478,8 +1478,14 @@
nv_unset(ED_CHRNOD);
else
{
- strncpy(inbuff,cp,bufsize);
- insize = strlen(inbuff);
+ if (bufsize>0)
+ {
+ strncpy(inbuff,cp,bufsize);
+ inbuff[bufsize-1]='\0';
+ insize = strlen(inbuff);
+ }
+ else
+ insize=0;
}
nv_unset(ED_TXTNOD);
return(insize);

View File

@ -3,7 +3,7 @@
@@ -210,37 +210,42 @@
}
job_init(sh_isoption(SH_LOGIN_SHELL));
if(sh_isoption(SH_LOGIN_SHELL) && !sh_isoption(SH_NOPROFILE))
if(sh_isoption(SH_LOGIN_SHELL))
- {
/* system profile */
sh_source(shp, iop, e_sysprofile);

144
ksh93-realloc.dif Normal file
View File

@ -0,0 +1,144 @@
--- src/cmd/ksh93/sh/io.c
+++ src/cmd/ksh93/sh/io.c 2007-09-14 18:15:17.000000000 +0200
@@ -380,7 +380,7 @@
{
register int n;
filemapsize = 8;
- filemap = (struct fdsave*)malloc(8*sizeof(struct fdsave));
+ filemap = (struct fdsave*)malloc(filemapsize*sizeof(struct fdsave));
#if SHOPT_FASTPIPE
n = sh.lim.open_max+2;
#else
@@ -502,7 +502,7 @@
if(f2==job.fd)
job.fd=fd;
*sh.fdptrs[fd] = fd;
- sh.fdptrs[f2] = 0;
+ sh.fdptrs[f2] = (int*)0;
}
sh.sftable[fd] = sp;
sh.fdstatus[fd] = sh.fdstatus[f2];
@@ -578,7 +578,7 @@
sh.fdstatus[fd] = IOCLOSE;
if(sh.fdptrs[fd])
*sh.fdptrs[fd] = -1;
- sh.fdptrs[fd] = 0;
+ sh.fdptrs[fd] = (int*)0;
if(fd < 10)
sh.inuse_bits &= ~(1<<fd);
return(r);
@@ -1276,10 +1276,31 @@
/* make sure table is large enough */
if(sh.topfd >= filemapsize)
{
+ long oldptr = (long)filemap;
+ long moved;
+
filemapsize += 8;
if(!(filemap = (struct fdsave*)realloc(filemap,filemapsize*sizeof(struct fdsave))))
errormsg(SH_DICT,ERROR_exit(4),e_nospace);
-
+ moved = (long)filemap - oldptr;
+
+ /* realloc(2) possibly has moved start address of filemap */
+#if SHOPT_FASTPIPE
+ for(savefd=sh.lim.open_max+2; --savefd>=0; )
+#else
+ for(savefd=sh.lim.open_max; --savefd>=0; )
+#endif /* SHOPT_FASTPIPE */
+ {
+ if (sh.fdptrs[savefd]) /* update address if used */
+ {
+ oldptr = (long)sh.fdptrs[savefd];
+ if (oldptr == (long)(&sh.coutpipe))
+ continue;
+ if (oldptr == (long)(&sh.cpipe[0]))
+ continue;
+ sh.fdptrs[savefd] = (int*)(oldptr+moved);
+ }
+ }
}
#if SHOPT_DEVFD
if(origfd <0)
--- src/cmd/ksh93/sh/jobs.c
+++ src/cmd/ksh93/sh/jobs.c 2007-09-12 14:25:34.000000000 +0000
@@ -1011,12 +1011,14 @@ void job_clear(void)
{
pw = pw->p_nxtproc;
free((void*)px);
+ px = (struct process *)0;
}
}
for(jp=bck.list; jp;jp=jpnext)
{
jpnext = jp->next;
free((void*)jp);
+ jp = (struct jobsave *)0;
}
bck.list = 0;
if(njob_savelist < NJOB_SAVELIST)
@@ -1638,7 +1640,10 @@ static int job_chksave(register pid_t pi
job_savelist = jp;
}
else
+ {
free((void*)jp);
+ jp = (struct jobsave *)0;
+ }
}
return(r);
}
@@ -1673,6 +1678,7 @@ void job_subrestore(void* ptr)
{
jpnext = jp->next;
free((void*)jp);
+ jp = (struct jobsave *)0;
}
free(ptr);
job_unlock();
--- src/cmd/ksh93/sh/macro.c
+++ src/cmd/ksh93/sh/macro.c 2007-09-14 10:13:04.000000000 +0000
@@ -1829,9 +1829,19 @@ static void comsubst(Mac_t *mp,int type)
mac_copy(mp,&lastc,1);
lastc = 0;
}
+ /* nothing todo */
+ if(c <= 0)
+ continue;
/* delay appending trailing new-lines */
while(str[--c]=='\n')
+ {
newlines++;
+ if(c == 0)
+ {
+ c--;
+ break;
+ }
+ }
if(++c < bufsize)
str[c] = 0;
else
--- src/cmd/ksh93/sh/xec.c
+++ src/cmd/ksh93/sh/xec.c 2007-09-14 18:16:17.000000000 +0200
@@ -755,10 +755,11 @@
if(np && is_abuiltin(np))
{
void *context;
- int scope=0, jmpval, save_prompt,share;
+ int scope=0, jmpval, save_prompt,share=0;
struct checkpt buff;
unsigned long was_vi=0, was_emacs=0, was_gmacs=0;
struct stat statb;
+ memset(&statb, 0, sizeof(struct stat));
if(strchr(nv_name(np),'/'))
{
/*
@@ -2539,7 +2540,7 @@
}
if(fcntl(*sh.cpipe,F_SETFD,FD_CLOEXEC)>=0)
sh.fdstatus[sh.cpipe[0]] |= IOCLEX;
- sh.fdptrs[sh.cpipe[0]] = sh.cpipe;
+ sh.fdptrs[sh.cpipe[0]] = &sh.cpipe[0];
if(fcntl(sh.cpipe[1],F_SETFD,FD_CLOEXEC) >=0)
sh.fdstatus[sh.cpipe[1]] |= IOCLEX;

View File

@ -27,7 +27,7 @@
+# define DEFSHELL "/bin/sh"
+#endif
#if defined(linux)
#if defined(__linux__)
static void error_exit(const char*) __attribute__ ((noreturn));
@@ -76,11 +80,14 @@ static int endsh(const char*);
# undef _lib_setreuid

View File

@ -38,7 +38,7 @@
#define THISPROG "/etc/suid_exec"
#define DEFSHELL "/bin/sh"
+#if defined(linux)
+#if defined(__linux__)
+static void error_exit(const char*) __attribute__ ((noreturn));
+#else
static void error_exit(const char*);
@ -135,7 +135,7 @@
int notify = 0;
int ignore = 0;
-#if _lib_lchmod
+#if !defined(linux) && _lib_lchmod
+#if !defined(__linux__) && _lib_lchmod
int chlink = 0;
#endif
struct stat st;
@ -144,7 +144,7 @@
continue;
case 'h':
-#if _lib_lchmod
+#if !defined(linux) && _lib_lchmod
+#if !defined(__linux__) && _lib_lchmod
chlink = 1;
#endif
continue;
@ -153,7 +153,7 @@
}
chmodf =
-#if _lib_lchmod
+#if !defined(linux) && _lib_lchmod
+#if !defined(__linux__) && _lib_lchmod
chlink ? lchmod :
#endif
chmod;

116
ksh93s-fix.dif Normal file
View File

@ -0,0 +1,116 @@
--- src/cmd/ksh93/sh/jobs.c
+++ src/cmd/ksh93/sh/jobs.c Tue Aug 28 12:58:29 2007
@@ -43,6 +43,8 @@
# define WIFCONTINUED(wstat) (0)
#endif
+#define NJOB_SAVELIST 4
+
/*
* temporary hack to get W* macros to work
*/
@@ -59,13 +61,35 @@
unsigned short exitval;
};
+static struct jobsave *job_savelist;
+static int njob_savelist;
+
+static void init_savelist(void)
+{
+ register struct jobsave *jp;
+ while(njob_savelist < NJOB_SAVELIST)
+ {
+ jp = newof(0,struct jobsave,1,0);
+ jp->next = job_savelist;
+ job_savelist = jp;
+ njob_savelist++;
+ }
+}
+
/*
* return next on link list of jobsave free list
*/
static struct jobsave *jobsave_create(pid_t pid)
{
- struct jobsave *jp;
- if(jp = newof(0,struct jobsave,1,0))
+ register struct jobsave *jp = job_savelist;
+ if(jp)
+ {
+ njob_savelist--;
+ job_savelist = jp->next;
+ }
+ else
+ jp = newof(0,struct jobsave,1,0);
+ if(jp)
jp->pid = pid;
return(jp);
}
@@ -371,6 +395,8 @@
# if defined(SIGCLD) && (SIGCLD!=SIGCHLD)
signal(SIGCLD,job_waitsafe);
# endif
+ if(njob_savelist < NJOB_SAVELIST)
+ init_savelist();
if(!sh_isoption(SH_INTERACTIVE))
return;
/* use new line discipline when available */
@@ -993,6 +1019,8 @@
free((void*)jp);
}
bck.list = 0;
+ if(njob_savelist < NJOB_SAVELIST)
+ init_savelist();
job.pwlist = NIL(struct process*);
job.numpost=0;
job.waitall = 0;
@@ -1015,6 +1043,8 @@
register struct process *pw;
register History_t *hp = sh.hist_ptr;
sh.jobenv = sh.curenv;
+ if(njob_savelist < NJOB_SAVELIST)
+ init_savelist();
if(job.toclear)
{
job_clear();
@@ -1273,7 +1303,13 @@
px->p_flag &= ~P_EXITSAVE;
}
}
- if(!(px=job_unpost(pw,1)) || !job.waitall)
+ if(!job.waitall)
+ {
+ if(!sh_isoption(SH_PIPEFAIL))
+ job_unpost(pw,1);
+ break;
+ }
+ else if(!(px=job_unpost(pw,1)))
break;
pw = px;
continue;
@@ -1312,6 +1348,8 @@
else
tty_set(-1, 0, NIL(struct termios*));
done:
+ if(!job.waitall && sh_isoption(SH_PIPEFAIL))
+ return;
if(!sh.intrap)
{
job_lock();
@@ -1593,7 +1631,14 @@
else
bck.list = jp->next;
bck.count--;
- free((void*)jp);
+ if(njob_savelist < NJOB_SAVELIST)
+ {
+ njob_savelist++;
+ jp->next = job_savelist;
+ job_savelist = jp;
+ }
+ else
+ free((void*)jp);
}
return(r);
}