Author: arekm                        Date: Thu May  8 06:36:12 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- updated

---- Files affected:
SOURCES:
   pdksh-debian.patch (1.4 -> 1.5) 

---- Diffs:

================================================================
Index: SOURCES/pdksh-debian.patch
diff -u SOURCES/pdksh-debian.patch:1.4 SOURCES/pdksh-debian.patch:1.5
--- SOURCES/pdksh-debian.patch:1.4      Wed Nov  8 09:07:21 2006
+++ SOURCES/pdksh-debian.patch  Thu May  8 08:36:06 2008
@@ -1,432 +1,333 @@
---- pdksh-5.2.14.orig/alloc.c
-+++ pdksh-5.2.14/alloc.c
-@@ -1,3 +1,5 @@
-+#ifndef DEBIAN
-+
- /*
-  * area-based allocation built on malloc/free
-  */
-@@ -110,6 +112,13 @@
-       Block  *block;
-       struct {int _;} junk;   /* alignment */
-       double djunk;           /* alignment */
-+#ifdef DEBIAN /* patch from RedHat */
-+#ifdef __ia64__
-+       /* IA64 requires 16 byte alignment for some objects, so make
-+        * this the minimum allocation size */
-+      char    ajunk[16];
-+#endif
-+#endif
- };
- 
- struct Block {
-@@ -282,7 +291,9 @@
-        * working (as it assumes size < ICELLS means it is not
-        * a `large object').
-        */
--      if (oldcells > ICELLS && cells > ICELLS) {
-+      if (oldcells > ICELLS && cells > ICELLS 
-+          && ((dp-2)->block->last == dp+oldcells) /* don't destroy blocks 
which have grown! */
-+         ) {
-               Block *bp = (dp-2)->block;
-               Block *nbp;
-               /* Saved in case realloc fails.. */
-@@ -332,7 +343,7 @@
-        * (need to check that cells < ICELLS so we don't make an
-        * object a `large' - that would mess everything up).
-        */
--      if (dp && cells > oldcells && cells <= ICELLS) {
-+      if (dp && cells > oldcells) {
-               Cell *fp, *fpp;
-               Block *bp = (dp-2)->block;
-               int need = cells - oldcells - NOBJECT_FIELDS;
-@@ -363,7 +374,7 @@
-        * it to malloc...)
-        * Note: this also handles cells == oldcells (a no-op).
-        */
--      if (dp && cells <= oldcells && oldcells <= ICELLS) {
-+      if (dp && cells <= oldcells) {
-               int split;
- 
-               split = oldcells - cells;
-@@ -411,7 +422,9 @@
- 
-       /* If this is a large object, just free it up... */
-       /* Release object... */
--      if ((dp-1)->size > ICELLS) {
-+      if ((dp-1)->size > ICELLS
-+          && (bp->last == dp + (dp-1)->size) /* don't free non-free blocks 
which have grown! */
-+         ) {
-               ablockfree(bp, ap);
-               ACHECK(ap);
-               return;
-@@ -774,3 +787,127 @@
- # endif /* TEST_ALLOC */
+  * Applied patch from upstream ftp site to fix problem with readonly
+    variables (closes: #57727).
+Index: pdksh/jobs.c
+===================================================================
+--- pdksh.orig/jobs.c  2008-04-15 20:47:52.000000000 +0200
++++ pdksh/jobs.c       2008-04-15 20:48:46.000000000 +0200
+@@ -219,8 +219,7 @@
+ static void           check_job ARGS((Job *j));
+ static void           put_job ARGS((Job *j, int where));
+ static void           remove_job ARGS((Job *j, const char *where));
+-static void           kill_job ARGS((Job *j));
+-static void           fill_command ARGS((char *c, int len, struct op *t));
++static int            kill_job ARGS((Job *j, int sig));
  
- #endif /* MEM_DEBUG */
-+
-+#else /* DEBIAN */ /* patch from OpenBSD */
-+
-+/*    $OpenBSD: alloc.c,v 1.6 2003/08/05 20:52:27 millert Exp $       */
-+/*
-+ * Copyright (c) 2002 Marc Espie.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
-+ * ``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 DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
-+ * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+/*
-+ * area-based allocation built on malloc/free
-+ */
-+
-+#include "sh.h"
-+
-+struct link {
-+      struct link *prev;
-+      struct link *next;
-+};
-+
-+Area *
-+ainit(Area *ap)
-+{
-+      ap->freelist = NULL;
-+      return ap;
-+}
-+
-+void
-+afreeall(Area *ap)
-+{
-+      struct link *l, *l2;
-+
-+      for (l = ap->freelist; l != NULL; l = l2) {
-+              l2 = l->next;
-+              free(l);
-+      }
-+      ap->freelist = NULL;
-+}
-+
-+#define L2P(l)        ( (void *)(((char *)(l)) + sizeof(struct link)) )
-+#define P2L(p)        ( (struct link *)(((char *)(p)) - sizeof(struct link)) )
-+
-+void *
-+alloc(size_t size, Area *ap)
-+{
-+      struct link *l;
-+
-+      l = malloc(size + sizeof(struct link));
-+      if (l == NULL)
-+              internal_errorf(1, "unable to allocate memory");
-+      l->next = ap->freelist;
-+      l->prev = NULL;
-+      if (ap->freelist)
-+              ap->freelist->prev = l;
-+      ap->freelist = l;
-+
-+      return L2P(l);
-+}
-+
-+void *
-+aresize(void *ptr, size_t size, Area *ap)
-+{
-+      struct link *l, *l2, *lprev, *lnext;
-+
-+      if (ptr == NULL)
-+              return alloc(size, ap);
-+
-+      l = P2L(ptr);
-+      lprev = l->prev;
-+      lnext = l->next;
-+
-+      l2 = realloc(l, size+sizeof(struct link));
-+      if (l2 == NULL)
-+              internal_errorf(1, "unable to allocate memory");
-+      if (lprev)
-+          lprev->next = l2;
-+      else
-+          ap->freelist = l2;
-+      if (lnext)
-+          lnext->prev = l2;
-+
-+      return L2P(l2);
-+}
-+
-+void
-+afree(void *ptr, Area *ap)
-+{
-+      struct link *l;
-+
-+      if (!ptr)
-+              return;
-+
-+      l = P2L(ptr);
-+
-+      if (l->prev)
-+              l->prev->next = l->next;
-+      else
-+              ap->freelist = l->next;
-+      if (l->next)
-+              l->next->prev = l->prev;
-+
-+      free(l);
-+}
-+#endif /* DEBIAN */
---- pdksh-5.2.14.orig/c_ksh.c
-+++ pdksh-5.2.14/c_ksh.c
-@@ -1110,13 +1110,14 @@
-                       return 1;
+ /* initialize job control */
+ void
+@@ -294,10 +293,17 @@
+                                   && procpid == kshpid)))))
+               {
+                       killed = 1;
+-                      killpg(j->pgrp, SIGHUP);
++                      if (j->pgrp == 0)
++                              kill_job(j, SIGHUP);
++                      else
++                              killpg(j->pgrp, SIGHUP);
+ #ifdef JOBS
+-                      if (j->state == PSTOPPED)
+-                              killpg(j->pgrp, SIGCONT);
++                      if (j->state == PSTOPPED) {
++                              if (j->pgrp == 0)
++                                      kill_job(j, SIGCONT);
++                              else
++                                      killpg(j->pgrp, SIGCONT);
++                      }
+ #endif /* JOBS */
                }
-       wp += builtin_opt.optind;
--      if (!*wp)
-+      if (!*wp) {
-               if (j_jobs((char *) 0, flag, nflag))
-                       rv = 1;
--      else
-+      } else {
-               for (; *wp; wp++)
-                       if (j_jobs(*wp, flag, nflag))
-                               rv = 1;
-+      }
-       return rv;
- }
+       }
+@@ -497,7 +503,7 @@
+               put_job(j, PJ_PAST_STOPPED);
+       }
  
-@@ -1208,6 +1209,7 @@
-                                               builtin_opt.optarg);
-                                       return 1;
-                               }
-+                              break;          
-                         case '?':
-                               return 1;
-                       }
---- pdksh-5.2.14.orig/c_sh.c
-+++ pdksh-5.2.14/c_sh.c
-@@ -422,7 +422,8 @@
- c_eval(wp)
-       char **wp;
- {
--      register struct source *s;
-+      register struct source *s,*olds=source;
-+      int retval, errexitflagtmp;
+-      fill_command(p->command, sizeof(p->command), t);
++      snptreef(p->command, sizeof(p->command), "%T", t);
  
-       if (ksh_getopt(wp, &builtin_opt, null) == '?')
-               return 1;
-@@ -455,8 +456,12 @@
-                */
-               exstat = subst_exstat;
+       /* create child process */
+       forksleep = 1;
+@@ -508,7 +514,7 @@
+               forksleep <<= 1;
        }
--
--      return shell(s, FALSE);
-+      errexitflagtmp = Flag(FERREXIT);
-+      Flag(FERREXIT) = 0;
-+      retval=shell(s, FALSE);
-+      Flag(FERREXIT) = errexitflagtmp;
-+      source=olds;
-+      return retval;
- }
- 
- int
-@@ -643,6 +648,7 @@
-               for (wp = l->argv; (*wp++ = *owp++) != NULL; )
-                       ;
+       if (i < 0) {
+-              kill_job(j);
++              kill_job(j, SIGKILL);
+               remove_job(j, "fork failed");
+ #ifdef NEED_PGRP_SYNC
+               if (j_sync_open) {
+@@ -823,11 +829,10 @@
        }
-+#ifndef DEBIAN
-       /* POSIX says set exit status is 0, but old scripts that use
-        * getopt(1), use the construct: set -- `getopt ab:c "$@"`
-        * which assumes the exit value set will be that of the ``
-@@ -650,6 +656,12 @@
-        * if there are no command substitutions).
-        */
-       return Flag(FPOSIX) ? 0 : subst_exstat;
-+#else 
-+      /* On Debian we always want set to return 0 like ksh93 does.
-+       * See: Bug#118476.
-+       */ 
-+      return 0;
-+#endif /* DEBIAN */
- }
  
- int
-@@ -844,7 +856,7 @@
-                        * keeps them open).
-                        */
- #ifdef KSH
--                      if (i > 2 && e->savefd[i])
-+                      if (!Flag(FSH) &&i > 2 && e->savefd[i])
-                               fd_clexec(i);
- #endif /* KSH */
-               }
---- pdksh-5.2.14.orig/c_test.c
-+++ pdksh-5.2.14/c_test.c
-@@ -124,10 +124,10 @@
-       te.pos.wp = wp + 1;
-       te.wp_end = wp + argc;
+       if (j->pgrp == 0) {     /* started when !Flag(FMONITOR) */
+-              for (p=j->proc_list; p != (Proc *) 0; p = p->next)
+-                      if (kill(p->pid, sig) < 0) {
+-                              bi_errorf("%s: %s", cp, strerror(errno));
+-                              rv = 1;
+-                      }
++              if (kill_job(j, sig) < 0) {
++                      bi_errorf("%s: %s", cp, strerror(errno));
++                      rv = 1;
++              }
+       } else {
+ #ifdef JOBS
+               if (j->state == PSTOPPED && (sig == SIGTERM || sig == SIGHUP))
+@@ -1825,50 +1830,17 @@
+  *
+  * If jobs are compiled in then this routine expects sigchld to be blocked.
+  */
+-static void
+-kill_job(j)
++static int
++kill_job(j, sig)
+       Job     *j;
++      int     sig;
+ {
+       Proc    *p;
++      int     rval = 0;
  
--      /* 
-+      /*
-        * Handle the special cases from POSIX.2, section 4.62.4.
--       * Implementation of all the rules isn't necessary since 
--       * our parser does the right thing for the ommited steps.
-+       * Implementation of all the rules isn't necessary since
-+       * our parser does the right thing for the omitted steps.
-        */
-       if (argc <= 5) {
-               char **owp = wp;
-@@ -238,7 +238,7 @@
-                       if (not)
-                               res = !res;
-               }
--              return res; 
-+              return res;
-         case TO_FILRD: /* -r */
-               return test_eaccess(opnd1, R_OK) == 0;
-         case TO_FILWR: /* -w */
-@@ -338,7 +338,7 @@
-         case TO_FILUID: /* -O */
-               return test_stat(opnd1, &b1) == 0 && b1.st_uid == ksheuid;
-         case TO_FILGID: /* -G */
--              return test_stat(opnd1, &b1) == 0 && b1.st_gid == getegid();
-+              return test_stat(opnd1, &b1) == 0 && b1.st_gid == kshegid;
-       /*
-        * Binary Operators
-        */
-@@ -456,10 +456,12 @@
+       for (p = j->proc_list; p != (Proc *) 0; p = p->next)
+               if (p->pid != 0)
+-                      (void) kill(p->pid, SIGKILL);
+-}
+-
+-/* put a more useful name on a process than snptreef does (in certain cases) 
*/
+-static void
+-fill_command(c, len, t)
+-      char            *c;
+-      int             len;
+-      struct op       *t;
+-{
+-      int             alen;
+-      char            **ap;
+-
+-      if (t->type == TEXEC || t->type == TCOM) {
+-              /* Causes problems when set -u is in effect, can also
+-                 cause problems when array indices evaluated (may have
+-                 side effects, eg, assignment, incr, etc.)
+-              if (t->type == TCOM)
+-                      ap = eval(t->args, DOBLANK|DONTRUNCOMMAND);
+-              else
+-              */
+-              ap = t->args;
+-              --len; /* save room for the null */
+-              while (len > 0 && *ap != (char *) 0) {
+-                      alen = strlen(*ap);
+-                      if (alen > len)
+-                              alen = len;
+-                      memcpy(c, *ap, alen);
+-                      c += alen;
+-                      len -= alen;
+-                      if (len > 0) {
+-                              *c++ = ' '; len--;
+-                      }
+-                      ap++;
+-              }
+-              *c = '\0';
+-      } else
+-              snptreef(c, len, "%T", t);
++                      if (kill(p->pid, sig) < 0)
++                              rval = -1;
++      return rval;
+ }
+Index: pdksh/shf.c
+===================================================================
+--- pdksh.orig/shf.c   2008-04-15 20:47:52.000000000 +0200
++++ pdksh/shf.c        2008-04-15 20:48:46.000000000 +0200
+@@ -355,7 +355,6 @@
+               shf->rp = nbuf + (shf->rp - shf->buf);
+               shf->wp = nbuf + (shf->wp - shf->buf);
+               shf->rbsize += shf->wbsize;
+-              shf->wbsize += shf->wbsize;
+               shf->wnleft += shf->wbsize;
+               shf->wbsize *= 2;
+               shf->buf = nbuf;
+Index: pdksh/var.c
+===================================================================
+--- pdksh.orig/var.c   2008-04-15 20:47:52.000000000 +0200
++++ pdksh/var.c        2008-04-15 20:48:46.000000000 +0200
+@@ -353,7 +353,9 @@
+       const char *s;
+       int error_ok;
+ {
+-      if (vq->flag & RDONLY) {
++      int no_ro_check = error_ok & 0x4;
++      error_ok &= ~0x4;
++      if ((vq->flag & RDONLY) && !no_ro_check) {
+               warningf(TRUE, "%s: is read only", vq->name);
+               if (!error_ok)
+                       errorf(null);
+@@ -715,13 +717,13 @@
+       if (val != NULL) {
+               if (vp->flag&INTEGER) {
+                       /* do not zero base before assignment */
+-                      setstr(vp, val, KSH_UNWIND_ERROR);
++                      setstr(vp, val, KSH_UNWIND_ERROR | 0x4);
+                       /* Done after assignment to override default */
+                       if (base > 0)
+                               vp->type = base;
+               } else
+                       /* setstr can't fail (readonly check already done) */
+-                      setstr(vp, val, KSH_RETURN_ERROR);
++                      setstr(vp, val, KSH_RETURN_ERROR | 0x4);
        }
- #endif /* !HAVE_DEV_FD */
  
--      /* On most (all?) unixes, access() says everything is executable for
-+      res = eaccess(path, mode);
-+      /*
-+       * On most (all?) unixes, access() says everything is executable for
-        * root - avoid this on files by using stat().
-        */
--      if ((mode & X_OK) && ksheuid == 0) {
-+      if (res == 0 && ksheuid == 0 && (mode & X_OK)) {
-               struct stat statb;
+       /* only x[0] is ever exported, so use vpbase */
+  * Applied patch from upstream author which fixed problem with 'set -e'
+    (closes: #71256).
+Index: pdksh/exec.c
+===================================================================
+--- pdksh.orig/exec.c  2008-04-15 20:46:56.000000000 +0200
++++ pdksh/exec.c       2008-04-15 20:49:17.000000000 +0200
+@@ -76,6 +76,7 @@
+ {
+       int i;
+       volatile int rv = 0;
++      volatile int rv_prop = 0; /* rv being propogated or newly generated? */
+       int pv[2];
+       char ** volatile ap;
+       char *s, *cp;
+@@ -157,6 +158,7 @@
  
-               if (stat(path, &statb) < 0)
-@@ -469,13 +471,7 @@
+         case TPAREN:
+               rv = execute(t->left, flags|XFORK);
++              rv_prop = 1;
+               break;
+ 
+         case TPIPE:
+@@ -275,6 +277,7 @@
+                       rv = execute(t->right, flags & XERROK);
                else
-                       res = (statb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))
-                               ? 0 : -1;
--              /* Need to check other permissions?  If so, use access() as
--               * this will deal with root on NFS.
--               */
--              if (res == 0 && (mode & (R_OK|W_OK)))
--                      res = eaccess(path, mode);
--      } else
--              res = eaccess(path, mode);
-+      }
+                       flags |= XERROK;
++              rv_prop = 1;
+               break;
  
-       return res;
- }
-@@ -660,3 +656,36 @@
-       else
-               bi_errorf("%s", msg);
- }
-+
-+
-+#ifdef DEBIAN
-+int eaccess(const char *pathname, int mode) {
-+      int need_setreuid, need_setregid;
-+      int result;
-+      int _errno;
-+      
-+
-+      
-+      if (( need_setregid = ( kshgid != kshegid ) )) {
-+              setregid( kshegid, kshgid );
-+      }
-+      
-+      if (( need_setreuid = ( kshuid  != ksheuid ) )) {
-+              setreuid( ksheuid, kshuid );
-+      }
-+
-+      result = access( pathname, mode );
-+      _errno = errno;
-+
-+      if ( need_setregid ) {
-+              setregid( kshgid, kshegid );
-+      }
-+      
-+      if ( need_setreuid ) {
-+              setreuid( kshuid, ksheuid );
-+      }
-+
-+      errno = _errno;
-+      return result;
-+}
-+#endif        
---- pdksh-5.2.14.orig/c_ulimit.c
-+++ pdksh-5.2.14/c_ulimit.c
-@@ -111,6 +111,9 @@
- #ifdef RLIMIT_SWAP
-               { "swap(kbytes)", RLIMIT_SWAP, RLIMIT_SWAP, 1024, 'w' },
- #endif
-+#ifdef RLIMIT_LOCKS
-+              { "flocks", RLIMIT, RLIMIT_LOCKS, RLIMIT_LOCKS, -1, 'L' },
-+#endif
-               { (char *) 0 }
-           };
-       static char     options[3 + NELEM(limits)];
-@@ -189,7 +192,18 @@
-               for (l = limits; l->name; l++) {
- #ifdef HAVE_SETRLIMIT
-                       if (l->which == RLIMIT) {
--                              getrlimit(l->gcmd, &limit);
-+                              int getreturn;
-+
-+                              getreturn=getrlimit(l->gcmd, &limit);
-+#ifdef RLIMIT_LOCKS                           
-+                              if ( getreturn < 0 ) {
-+                                      if ( ( errno == EINVAL ) &&
-+                                           ( l->gcmd == RLIMIT_LOCKS ) ) {
-+                                              limit.rlim_cur = RLIM_INFINITY;
-+                                              limit.rlim_max = RLIM_INFINITY;
-+                                      }
-+                              }
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/pdksh-debian.patch?r1=1.4&r2=1.5&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to