File: patch

package info (click to toggle)
chrootuid 1.3-6
  • links: PTS
  • area: main
  • in suites: bullseye, buster, jessie, jessie-kfreebsd, stretch, wheezy
  • size: 76 kB
  • sloc: ansic: 102; makefile: 53
file content (96 lines) | stat: -rw-r--r-- 2,794 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
--- chrootuid-1.3/chrootuid.c.orig      2002-12-11 15:28:44 +0200
+++ chrootuid-1.3/chrootuid.c   2002-12-11 15:42:57 +0200
@@ -50,9 +50,11 @@

 #include <unistd.h>
 #include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
 #include <pwd.h>
 #include <grp.h>
-#include <syslog.h> 

 int     main(argc, argv)
 int     argc;
@@ -65,12 +67,6 @@
      * require only two arguments.
      */

-#ifdef LOG_DAEMON
-    (void) openlog(argv[0], LOG_PID | LOG_NDELAY, LOG_DAEMON);
-#else
-    (void) openlog(argv[0], LOG_PID);
-#endif 
-
     /*
      * Require proper amount of arguments. In all cases of error, exit with
      * zero status because we have already reported the problem via syslogd.
@@ -78,44 +74,44 @@
      */

     if (argc < 4) {
-       syslog(LOG_ERR, "usage: %s path user command", argv[0]);
-       return (0);
+       fprintf(stderr,"usage: %s path user command\n", argv[0]);
+       return (1);
     }
     /* Must step into the new subtree. */
 
     if (chdir(argv[1])) {
-       syslog(LOG_ERR, "chdir(%s): %m", argv[1]);
-       return (0);
+       fprintf(stderr, "chdir(%s): %s\n", argv[1], strerror(errno));
+       return (1);
     }
     /* The user must be known in the *unrestricted* universe... */

     if ((pwd = getpwnam(argv[2])) == 0) {
-       syslog(LOG_ERR, "%s: user unknown", argv[2]);
-       return (0);
+       fprintf(stderr, "%s: user unknown\n", argv[2]);
+       return (1);
     }
     /* initgroups() accesses the group file in the unrestricted universe... */

     if (initgroups(pwd->pw_name, pwd->pw_gid) < 0) {
-       syslog(LOG_ERR, "initgroups: %m");
-       return (0);
+       fprintf(stderr, "initgroups: %s\n", strerror(errno));
+       return (1);
     }
     endgrent();

     /* Do the chroot() before giving away root privileges. */

     if (chroot(argv[1])) {
-       syslog(LOG_ERR, "chroot(%s): %m", argv[1]);
-       return (0);
+       fprintf(stderr, "chroot(%s): %s\n", argv[1], strerror(errno));
+       return (1);
     }
     /* Switch group id then user id. */

     if (setgid(pwd->pw_gid)) {
-       syslog(LOG_ERR, "setgid(%d): %m", pwd->pw_gid);
-       return (0);
+       fprintf(stderr, "setgid(%d): %s\n", pwd->pw_gid, strerror(errno));
+       return (1);
     }
     if (setuid(pwd->pw_uid)) {
-       syslog(LOG_ERR, "setuid(%d): %m", pwd->pw_uid);
-       return (0);
+       fprintf(stderr, "setuid(%d): %s\n", pwd->pw_uid, strerror(errno));
+       return (1);
     }
     /* In case we still have the /etc/passwd file still open. */

@@ -124,6 +120,6 @@
     /* Run the command and hope for the best. */

     (void) execv(argv[3], argv + 3);
-    syslog(LOG_ERR, "%s: %m", argv[3]);
-    return (0);
+    fprintf(stderr, "%s: %s", argv[3], strerror(errno));
+    return (1);
 }