]> git.armaanb.net Git - opendoas.git/blobdiff - doas.c
bump version to v6.0
[opendoas.git] / doas.c
diff --git a/doas.c b/doas.c
index 33be571de3bd542fe9eef95303f612380e357a54..d4d87cb7c930780effa5931cf944089cf4c3b083 100644 (file)
--- a/doas.c
+++ b/doas.c
@@ -46,8 +46,11 @@ version(void)
 static void __dead
 usage(void)
 {
-       fprintf(stderr, "usage: doas [-nsv] [-a style] [-C config] [-u user]"
-           " command [args]\n");
+       fprintf(stderr, "usage: doas [-nsv] "
+#ifdef HAVE_BSD_AUTH_H
+           "[-a style] "
+#endif
+           "[-C config] [-u user] command [args]\n");
        exit(1);
 }
 
@@ -246,17 +249,17 @@ main(int argc, char **argv)
 
        setprogname("doas");
 
-       if (pledge("stdio rpath getpw tty proc exec id", NULL) == -1)
+       if (pledge("stdio rpath getpw tty recvfd proc exec id", NULL) == -1)
                err(1, "pledge");
 
-       /* closefrom(STDERR_FILENO + 1); */
+       closefrom(STDERR_FILENO + 1);
 
        uid = getuid();
 
 #ifdef HAVE_BSD_AUTH_H
 # define OPTSTRING "a:C:nsu:v"
 #else
-# define OPTSTRING "C:nsu:v"
+# define OPTSTRING "+C:nsu:v"
 #endif
 
        while ((ch = getopt(argc, argv, OPTSTRING)) != -1) {
@@ -311,9 +314,11 @@ main(int argc, char **argv)
 
        if (sflag) {
                sh = getenv("SHELL");
-               if (sh == NULL || *sh == '\0')
-                       shargv[0] = pw->pw_shell;
-               else
+               if (sh == NULL || *sh == '\0') {
+                       shargv[0] = strdup(pw->pw_shell);
+                       if (shargv[0] == NULL)
+                               err(1, NULL);
+               } else
                        shargv[0] = sh;
                argv = shargv;
                argc = 1;
@@ -328,7 +333,7 @@ main(int argc, char **argv)
        parseconfig("/etc/doas.conf", 1);
 
        /* cmdline is used only for logging, no need to abort on truncate */
-       (void) strlcpy(cmdline, argv[0], sizeof(cmdline));
+       (void)strlcpy(cmdline, argv[0], sizeof(cmdline));
        for (i = 1; i < argc; i++) {
                if (strlcat(cmdline, " ", sizeof(cmdline)) >= sizeof(cmdline))
                        break;
@@ -338,7 +343,7 @@ main(int argc, char **argv)
 
        cmd = argv[0];
        if (!permit(uid, groups, ngroups, &rule, target, cmd,
-           (const char**)argv + 1)) {
+           (const char **)argv + 1)) {
                syslog(LOG_AUTHPRIV | LOG_NOTICE,
                    "failed command for %s: %s", myname, cmdline);
                errc(1, EPERM, NULL);
@@ -438,7 +443,6 @@ main(int argc, char **argv)
            LOGIN_SETUSER) != 0)
                errx(1, "failed to set user context for target");
 #else
-       warn(pw->pw_name);
        if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0)
                errx(1, "setresgid");
        if (initgroups(pw->pw_name, pw->pw_gid) != 0)