From b0cc5364dfe8cd0c853f31271c902e3e9fa85659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Lindstr=C3=B6m?= Date: Sat, 29 Aug 2026 16:21:10 +0200 Subject: [PATCH] sesh: Fix login shell check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The check was wrong because it happened after argv was modified with `argv += optind`. Fixes: 3bdb5854815e12abae564bb29ed60746ac85b881 Signed-off-by: Henrik Lindström --- src/sesh.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sesh.c b/src/sesh.c index 72b8892324..7b889fe2b6 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -93,6 +93,7 @@ main(int argc, char *argv[], char *envp[]) unsigned int flags = CD_SUDOEDIT_FOLLOW; char *edit_user = NULL; int ch, ret, fd = -1; + bool login_shell; debug_decl(main, SUDO_DEBUG_MAIN); initprogname(argc > 0 ? argv[0] : "sesh"); @@ -101,6 +102,9 @@ main(int argc, char *argv[], char *envp[]) bindtextdomain(PACKAGE_NAME, LOCALEDIR); textdomain(PACKAGE_NAME); + /* If the first char of argv[0] is '-', we are running a login shell. */ + login_shell = argv[0] != NULL && argv[0][0] == '-'; + while ((ch = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { switch (ch) { case 'c': @@ -172,7 +176,6 @@ main(int argc, char *argv[], char *envp[]) } ret = sesh_sudoedit(mode, flags, edit_user, argc, argv); } else { - bool login_shell; char *cmnd; if (!ISSET(flags, CD_SUDOEDIT_FOLLOW)) { @@ -186,9 +189,6 @@ main(int argc, char *argv[], char *envp[]) usage(); } - /* If the first char of argv[0] is '-', we are running a login shell. */ - login_shell = argv[0][0] == '-'; - /* We must change the directory in sesh after the context changes. */ if (rundir != NULL && chdir(rundir) == -1) { sudo_warnx(U_("unable to change directory to %s"), rundir);