Add dpkg.diff with new start-stop-daemon code (this makes --name work)
authorrmh <rmh@thorin.(none)>
Tue, 27 Jan 2009 20:27:31 +0000 (21:27 +0100)
committerrmh <rmh@thorin.(none)>
Tue, 27 Jan 2009 20:27:31 +0000 (21:27 +0100)
dpkg.diff [new file with mode: 0644]

diff --git a/dpkg.diff b/dpkg.diff
new file mode 100644 (file)
index 0000000..bdc7dfe
--- /dev/null
+++ b/dpkg.diff
@@ -0,0 +1,70 @@
+diff -ur dpkg-1.14.24.old/utils/start-stop-daemon.c dpkg-1.14.24/utils/start-stop-daemon.c
+--- dpkg-1.14.24.old/utils/start-stop-daemon.c 2008-12-26 05:49:01.000000000 +0100
++++ dpkg-1.14.24/utils/start-stop-daemon.c     2009-01-27 21:19:37.847325961 +0100
+@@ -28,7 +28,7 @@
+ #  define OSLinux
+ #elif defined(__GNU__)
+ #  define OSHURD
+-#elif defined(__sun)
++#elif defined(__sun) || defined(__OpenSolaris_kernel__)
+ #  define OSsunos
+ #elif defined(OPENBSD) || defined(__OpenBSD__)
+ #  define OSOpenBSD
+@@ -70,6 +70,11 @@
+ #include <sys/pstat.h>
+ #endif
++#if defined(OSsunos)
++#define _STRUCTURED_PROC 1
++#include <sys/procfs.h>
++#endif
++
+ #include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -798,13 +803,44 @@
+ #endif /* OSHURD */
++#if defined(OSsunos)
++static int
++pid_is_user(pid_t pid, uid_t uid)
++{
++      struct stat sb;
++      char buf[32];
++
++      sprintf(buf, "/proc/%d", pid);
++      if (stat(buf, &sb) != 0)
++              return 0;
++      return (sb.st_uid == uid);
++}
++
++static int
++pid_is_cmd(pid_t pid, const char *name)
++{
++      char buf[32];
++      int fd;
++      struct psinfo _psinfo;
++
++      sprintf(buf, "/proc/%d/psinfo", pid);
++      fd = open(buf, O_RDONLY);
++      if (fd == -1)
++              return 0;
++      read(fd, &_psinfo, sizeof(struct psinfo));
++      close(fd);
++
++      return !strncmp (_psinfo.pr_fname, name, sizeof(_psinfo.pr_fname));
++}
++#endif /* OSsunos */
++
+ static void
+ check(pid_t pid)
+ {
+ #if defined(OSLinux) || defined(OShpux)
+       if (execname && !pid_is_exec(pid, &exec_stat))
+               return;
+-#elif defined(OSHURD) || defined(OSFreeBSD) || defined(OSNetBSD)
++#else
+       /* Let's try this to see if it works */
+       if (execname && !pid_is_cmd(pid, execname))
+               return;