Add openssh
[kopensolaris-gnu/patches.git] / dpkg.diff
1 diff -ur dpkg-1.14.24.old/utils/start-stop-daemon.c dpkg-1.14.24/utils/start-stop-daemon.c
2 --- dpkg-1.14.24.old/utils/start-stop-daemon.c  2008-12-26 05:49:01.000000000 +0100
3 +++ dpkg-1.14.24/utils/start-stop-daemon.c      2009-01-27 21:19:37.847325961 +0100
4 @@ -28,7 +28,7 @@
5  #  define OSLinux
6  #elif defined(__GNU__)
7  #  define OSHURD
8 -#elif defined(__sun)
9 +#elif defined(__sun) || defined(__OpenSolaris_kernel__)
10  #  define OSsunos
11  #elif defined(OPENBSD) || defined(__OpenBSD__)
12  #  define OSOpenBSD
13 @@ -70,6 +70,11 @@
14  #include <sys/pstat.h>
15  #endif
16  
17 +#if defined(OSsunos)
18 +#define _STRUCTURED_PROC 1
19 +#include <sys/procfs.h>
20 +#endif
21 +
22  #include <errno.h>
23  #include <stdio.h>
24  #include <stdlib.h>
25 @@ -798,13 +803,44 @@
26  
27  #endif /* OSHURD */
28  
29 +#if defined(OSsunos)
30 +static int
31 +pid_is_user(pid_t pid, uid_t uid)
32 +{
33 +       struct stat sb;
34 +       char buf[32];
35 +
36 +       sprintf(buf, "/proc/%d", pid);
37 +       if (stat(buf, &sb) != 0)
38 +               return 0;
39 +       return (sb.st_uid == uid);
40 +}
41 +
42 +static int
43 +pid_is_cmd(pid_t pid, const char *name)
44 +{
45 +       char buf[32];
46 +       int fd;
47 +       struct psinfo _psinfo;
48 +
49 +       sprintf(buf, "/proc/%d/psinfo", pid);
50 +       fd = open(buf, O_RDONLY);
51 +       if (fd == -1)
52 +               return 0;
53 +       read(fd, &_psinfo, sizeof(struct psinfo));
54 +       close(fd);
55 +
56 +       return !strncmp (_psinfo.pr_fname, name, sizeof(_psinfo.pr_fname));
57 +}
58 +#endif /* OSsunos */
59 +
60  static void
61  check(pid_t pid)
62  {
63  #if defined(OSLinux) || defined(OShpux)
64         if (execname && !pid_is_exec(pid, &exec_stat))
65                 return;
66 -#elif defined(OSHURD) || defined(OSFreeBSD) || defined(OSNetBSD)
67 +#else
68         /* Let's try this to see if it works */
69         if (execname && !pid_is_cmd(pid, execname))
70                 return;