Package: procps
Version: 3.2.7
Severity: important
Tags: patch

Fixes the PATH_MAX problems in proc/readproc.c file
and pwdx.c file. This patch builds procps on Hurd. And
the tools pgrep, pkill, kill, top, watch, tload also
work.

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: hurd-i386 (i686-AT386)

Kernel: GNU-Mach 1.3.99/Hurd-0.3
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash
Only in procps-3.2.7/: build-stamp
Only in procps-3.2.7/debian: files
Only in procps-3.2.7/debian: libproc-dev
Only in procps-3.2.7/debian: libproc-dev.debhelper.log
diff -ur cl3/procps-3.2.7/debian/postinst procps-3.2.7/debian/postinst
--- cl3/procps-3.2.7/debian/postinst    2008-08-21 17:35:17.000000000 +0530
+++ procps-3.2.7/debian/postinst        2008-08-21 17:49:08.000000000 +0530
@@ -60,9 +60,17 @@
           fi
                
                #
-               # Now to do the alternatives for w and ps
+               # Now to do the alternatives for w uptime kill vmstat and ps
                update-alternatives --install /usr/bin/w w /usr/bin/w.procps 50 
\
                        --slave /usr/share/man/man1/w.1.gz w.1.gz 
/usr/share/man/man1/w.procps.1.gz
+               update-alternatives --install /usr/bin/uptime uptime 
/usr/bin/uptime.procps 50 \
+                       --slave /usr/share/man/man1/uptime.1.gz uptime.1.gz 
/usr/share/man/man1/uptime.procps.1.gz                      
+               update-alternatives --install /usr/bin/kill kill 
/usr/bin/kill.procps 50 \
+                       --slave /usr/share/man/man1/kill.1.gz kill.1.gz 
/usr/share/man/man1/kill.procps.1.gz                    
+               update-alternatives --install /usr/bin/vmstat vmstat 
/usr/bin/vmstat.procps 50 \
+                       --slave /usr/share/man/man8/vmstat.8.gz vmstat.8.gz 
/usr/share/man/man8/vmstat.procps.8.gz                                          
    
+               update-alternatives --install /bin/ps ps /bin/ps.procps 50 \
+                       --slave /usr/share/man/man1/ps.1.gz ps.1.gz 
/usr/share/man/man1/ps.procps.1.gz
                
     ;;
 
Only in procps-3.2.7/debian: procps
Only in procps-3.2.7/debian: procps.debhelper.log
Only in procps-3.2.7/debian: procps.postinst.debhelper
Only in procps-3.2.7/debian: procps.postrm.debhelper
Only in procps-3.2.7/debian: procps.prerm.debhelper
Only in procps-3.2.7/debian: procps.substvars
diff -ur cl3/procps-3.2.7/debian/rules procps-3.2.7/debian/rules
--- cl3/procps-3.2.7/debian/rules       2008-08-21 17:35:17.000000000 +0530
+++ procps-3.2.7/debian/rules   2008-08-22 04:08:47.000000016 +0530
@@ -55,18 +55,46 @@
        (cd $(DEBROOT)/usr/bin && mv w w.procps )
        (cd $(DEBROOT)/usr/share/man/man1 && mv w.1 w.procps.1 )
 
+        # Rename kill as there are two of them
+       (cd $(DEBROOT)/bin && mv kill kill.procps )
+       (cd $(DEBROOT)/usr/share/man/man1 && mv kill.1 kill.procps.1 )
+
+       # Rename vmstat as there are two of them
+       (cd $(DEBROOT)/usr/bin && mv vmstat vmstat.procps )
+       (cd $(DEBROOT)/usr/share/man/man8 && mv vmstat.8 vmstat.procps.8 )
+       
+        # Rename uptime as there are two of them
+       (cd $(DEBROOT)/usr/bin && mv uptime uptime.procps )
+       (cd $(DEBROOT)/usr/share/man/man1 && mv uptime.1 uptime.procps.1 )
+
+       # Rename ps as there are two of them
+       (cd $(DEBROOT)/bin && mv ps ps.procps )
+       (cd $(DEBROOT)/usr/share/man/man1 && mv ps.1 ps.procps.1 )
+
        # Work-around until proc includes fixed
        (cp proc/*.h $(CURDIR)/debian/libproc-dev/usr/include/proc)
        cp static/libproc.a $(CURDIR)/debian/libproc-dev/usr/lib
 
 ifneq ($(DEB_HOST_ARCH_OS), linux)
        rm -f \
-               $(CURDIR)/debian/procps/bin/kill \
-               $(CURDIR)/debian/procps/usr/share/man/man1/kill.1 \
+               $(CURDIR)/debian/procps/usr/bin/slabtop \
+               $(CURDIR)/debian/procps/usr/share/man/man1/slabtop.1 \
                $(CURDIR)/debian/procps/sbin/sysctl \
                $(CURDIR)/debian/procps/usr/share/man/man8/sysctl.8 \
                $(NULL)
 endif
+ifeq ($(DEB_HOST_ARCH_OS), kfreebsd)
+       rm -f \
+               $(CURDIR)/debian/procps/bin/kill \
+               $(CURDIR)/debian/procps/usr/share/man/man1/kill.1 \
+               $(NULL)
+endif
+ifeq ($(DEB_HOST_ARCH_OS), hurd)
+       rm -f \
+               $(CURDIR)/debian/procps/usr/bin/pmap \
+               $(CURDIR)/debian/procps/usr/share/man/man1/pmap.1 \
+               $(NULL)
+endif
 
        dh_movefiles --sourcedir=debian/procps
        #rmdir $(CURDIR)/debian/procps/usr/include/proc
Only in procps-3.2.7/: free
Only in procps-3.2.7/: free.o
Only in procps-3.2.7/: kill
Only in procps-3.2.7/: patch-stamp
Only in procps-3.2.7/: pgrep
Only in procps-3.2.7/: pgrep.o
Only in procps-3.2.7/: pkill
Only in procps-3.2.7/: pmap
Only in procps-3.2.7/: pmap.o
Only in procps-3.2.7/proc: .depend
Only in procps-3.2.7/proc: alloc.o
Only in procps-3.2.7/proc: devname.o
Only in procps-3.2.7/proc: escape.o
Only in procps-3.2.7/proc: ksym.o
Only in procps-3.2.7/proc: libproc-3.2.7.so
Only in procps-3.2.7/proc: pwcache.o
diff -ur cl3/procps-3.2.7/proc/readproc.c procps-3.2.7/proc/readproc.c
--- cl3/procps-3.2.7/proc/readproc.c    2008-08-21 17:39:52.000000000 +0530
+++ procps-3.2.7/proc/readproc.c        2008-08-21 10:20:21.000000000 +0530
@@ -1036,7 +1036,7 @@
  * and filled out proc_t structure.
  */
 proc_t * get_proc_stats(pid_t pid, proc_t *p) {
-       static char path[PATH_MAX], sbuf[1024];
+       static char path[32], sbuf[1024];
        struct stat statbuf;
 
        sprintf(path, "/proc/%d", pid);
Only in procps-3.2.7/proc: readproc.o
Only in procps-3.2.7/proc: sig.o
Only in procps-3.2.7/proc: slab.o
Only in procps-3.2.7/proc: sysinfo.o
Only in procps-3.2.7/proc: version.o
Only in procps-3.2.7/proc: whattime.o
Only in procps-3.2.7/ps: display.o
Only in procps-3.2.7/ps: global.o
Only in procps-3.2.7/ps: help.o
Only in procps-3.2.7/ps: output.o
Only in procps-3.2.7/ps: parser.o
Only in procps-3.2.7/ps: ps
Only in procps-3.2.7/ps: select.o
Only in procps-3.2.7/ps: sortformat.o
Only in procps-3.2.7/: pwdx
diff -ur cl3/procps-3.2.7/pwdx.c procps-3.2.7/pwdx.c
--- cl3/procps-3.2.7/pwdx.c     2006-06-17 14:59:06.000000000 +0530
+++ procps-3.2.7/pwdx.c 2008-08-22 04:29:52.000000000 +0530
@@ -35,7 +35,6 @@
 
 int main(int argc, char* argv[])
 {
-     char buf[PATH_MAX+1];
      regex_t re;
      int i;
 
@@ -59,6 +58,7 @@
 
      for (i = 1; i < argc; i++) {
           if (regexec(&re, argv[i], 0, NULL, 0) != 0) {
+               char buf[27 + strlen (argv[i]) + 1];  // Constant 27 is the 
length of the error string "pwdx: ... "
                snprintf(buf, sizeof buf, "pwdx: invalid process id: %s\n", 
argv[i]);
                die(buf);
           }
@@ -68,9 +68,13 @@
 
      regfree(&re);
 
+     int alloclen = 128;
+     char *pathbuf = malloc(alloclen);
+
      for (i = 1; i < argc; i++) {
-          char * s = buf;
+          char * s;
           int len;
+          char buf[10 + strlen(argv[i]) + 1]; // Constant 10 is the length of 
strings "/proc/" + "/cwd" + 1
           
           // At this point, all arguments are in the form /proc/nnnn
           // or nnnn, so a simple check based on the first char is
@@ -82,7 +86,12 @@
 
           // buf contains /proc/nnnn/cwd symlink name on entry, the
           // target of that symlink on return
-          if ((len = readlink(buf, buf, PATH_MAX)) < 0) {
+          while ((len = readlink(buf, pathbuf, alloclen) == alloclen)) {
+               alloclen *= 2;
+               s = pathbuf = realloc(pathbuf, alloclen);
+          }  
+
+          if (len < 0) {
                s = strerror(errno == ENOENT ? ESRCH : errno);
           } else {
                buf[len] = 0;
@@ -91,5 +100,7 @@
           printf("%s: %s\n", argv[i], s);
      }
 
+     free(pathbuf);
+
      return 0;
 }
Only in procps-3.2.7/: pwdx.o
Only in procps-3.2.7/: skill
Only in procps-3.2.7/: skill.o
Only in procps-3.2.7/: slabtop
Only in procps-3.2.7/: slabtop.o
Only in procps-3.2.7/: snice
Only in procps-3.2.7/: static
Only in procps-3.2.7/: sysctl
Only in procps-3.2.7/: sysctl.o
Only in procps-3.2.7/: tload
Only in procps-3.2.7/: tload.o
Only in procps-3.2.7/: top
Only in procps-3.2.7/: top.o
Only in procps-3.2.7/: uptime
Only in procps-3.2.7/: uptime.o
Only in procps-3.2.7/: vmstat
Only in procps-3.2.7/: vmstat.o
Only in procps-3.2.7/: w
Only in procps-3.2.7/: w.o
Only in procps-3.2.7/: watch
Only in procps-3.2.7/: watch.o

Reply via email to