New Upstream Release - lxqt-sudo
Ready changes
Summary
Merged new upstream version: 1.3.0 (was: 1.2.0).
Diff
diff --git a/CHANGELOG b/CHANGELOG
index f9e3c9e..4e41c68 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+lxqt-sudo-1.3.0 / 2023-04-15
+=============================
+ * Added support for doas(1) backend.
+
lxqt-sudo-1.2.0 / 2022-11-05
=============================
* Updated translations and bumped the version.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 02d68f7..9740a99 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)
# Minimum Versions
-set(LXQT_MINIMUM_VERSION "1.2.0")
+set(LXQT_MINIMUM_VERSION "1.3.0")
set(QT_MINIMUM_VERSION "5.15.0")
find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED)
@@ -29,6 +29,7 @@ include(LXQtCompilerSettings NO_POLICY_SCOPE)
set ( LINK_LXSU "lxsu")
set ( LINK_LXSUDO "lxsudo")
+set ( LINK_LXDOAS "lxdoas")
set ( HDRS
passworddialog.h
@@ -81,41 +82,44 @@ target_link_libraries(lxqt-sudo
target_compile_definitions(lxqt-sudo
PRIVATE "LXQTSUDO_SUDO=\"sudo\""
PRIVATE "LXQTSUDO_SU=\"su\""
+ PRIVATE "LXQTSUDO_DOAS=\"doas\""
PRIVATE "LXQTSUDO=\"lxqt-sudo\""
PRIVATE "LXQTSUDO_LXSU=\"${LINK_LXSU}\""
PRIVATE "LXQTSUDO_LXSUDO=\"${LINK_LXSUDO}\""
+ PRIVATE "LXQTSUDO_LXDOAS=\"${LINK_LXDOAS}\""
PRIVATE "LXQT_VERSION=\"${LXQT_VERSION}\""
)
-add_custom_command(TARGET lxqt-sudo POST_BUILD
- COMMAND ln -f -s lxqt-sudo "${LINK_LXSU}"
- WORKING_DIRECTORY .
- COMMENT "Creating ${LINK_LXSU} symlink"
-)
-
-add_custom_command(TARGET lxqt-sudo POST_BUILD
- COMMAND ln -f -s lxqt-sudo "${LINK_LXSUDO}"
- WORKING_DIRECTORY .
- COMMENT "Creating ${LINK_LXSUDO} symlink"
-)
+foreach(LINK IN ITEMS ${LINK_LXSU} ${LINK_LXSUDO} ${LINK_LXDOAS})
+ add_custom_command(TARGET lxqt-sudo POST_BUILD
+ COMMAND ln -f -s lxqt-sudo "${LINK}"
+ WORKING_DIRECTORY .
+ COMMENT "Creating ${LINK} symlink"
+ )
+ install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${LINK}"
+ DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ COMPONENT Runtime
+ )
+ install(FILES
+ "man/${LINK}.1"
+ DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
+ COMPONENT Runtime
+ )
+endforeach()
install(TARGETS
lxqt-sudo
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT Runtime
)
-install(FILES
- "${CMAKE_CURRENT_BINARY_DIR}/${LINK_LXSU}" "${CMAKE_CURRENT_BINARY_DIR}/${LINK_LXSUDO}"
- DESTINATION "${CMAKE_INSTALL_BINDIR}"
- COMPONENT Runtime
-)
install(FILES
${DESKTOP_FILES}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
COMPONENT Runtime
)
install(FILES
- man/lxqt-sudo.1 "man/${LINK_LXSU}.1" "man/${LINK_LXSUDO}.1"
+ man/lxqt-sudo.1
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
COMPONENT Runtime
)
diff --git a/debian/changelog b/debian/changelog
index 9b73aa7..3d72c85 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+lxqt-sudo (1.3.0-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Sun, 06 Aug 2023 22:28:39 -0000
+
lxqt-sudo (1.2.0-1) unstable; urgency=medium
* New upstream release.
diff --git a/man/lxdoas.1 b/man/lxdoas.1
new file mode 120000
index 0000000..3a0b09d
--- /dev/null
+++ b/man/lxdoas.1
@@ -0,0 +1 @@
+lxqt-sudo.1
\ No newline at end of file
diff --git a/man/lxqt-sudo.1 b/man/lxqt-sudo.1
index 0671e66..d4f797f 100644
--- a/man/lxqt-sudo.1
+++ b/man/lxqt-sudo.1
@@ -1,16 +1,18 @@
.TH lxqt-sudo 1 "" "" "LXQt\ Module"
.SH NAME
-\fBlxqt-sudo\fR, \fBlxsu\fR \- execute a command as privileged user
+\fBlxqt-sudo\fR, \fBlxsu\fR, \fBlxdoas\fR \- execute a command as privileged user
.SH SYNOPSIS
\fBlxqt-sudo\fR \fIoption\fR [\fIcommand\fR [\fIarguments\fR]]
.br
\fBlxsu\fR [\fIoption\fR] [\fIcommand\fR [\fIarguments\fR]]
.br
\fBlxsudo\fR [\fIoption\fR] [\fIcommand\fR [\fIarguments\fR]]
+.br
+\fBlxdoas\fR [\fIoption\fR] [\fIcommand\fR [\fIarguments\fR]]
.SH DESCRIPTION
-\fBlxqt-sudo\fR (and symlinks \fBlxsu\fR, \fBlxsudo\fR) is a graphical QT frontend for plain \fBsudo(8)\fR or \fBsu(1)\fR (for requesting optional password in GUI fashion).
+\fBlxqt-sudo\fR (and symlinks \fBlxsu\fR, \fBlxsudo\fR, \fBlxdoas\fR) is a graphical QT frontend for plain \fBsudo(8)\fR, \fBsu(1)\fR or \fBdoas(1)\fR (for requesting optional password in GUI fashion).
.br
-When invoked it simply spawns child \fIsudo\fR or \fIsu\fR process with requested \fIcommand\fR (and optional \fIarguments\fR). If \fIsudo\fR/\fIsu\fR requests user's password,
+When invoked it simply spawns child \fIsudo\fR, \fIsu\fR or \fIdoas\fR process with requested \fIcommand\fR (and optional \fIarguments\fR). If \fIsudo\fR/\fIsu\fR/\fIdoas\fR requests user's password,
the GUI password dialog is shown and (after submit) the password is provided to backend.
.br
.SH OPTIONS
@@ -20,13 +22,15 @@ the GUI password dialog is shown and (after submit) the password is provided to
.br
-v|--version Print version information.
.br
- -s|--su Use \fIsu\fR as backend (default for \fBlxqt-sudo\fR & \fBlxsudo\fR is \fIsudo\fR, for \fBlxsu\fR is \fIsu\fR).
+ -s|--su Use \fIsu\fR as backend (default for \fBlxqt-sudo\fR & \fBlxsudo\fR is \fIsudo\fR, for \fBlxsu\fR \fIsu\fR, for \fBlxdoas\fR \fIdoas\fR).
+.br
+ -d|--sudo Use \fIsudo\fR as backend (default for \fBlxqt-sudo\fR & \fBlxsudo\fR is \fIsudo\fR, for \fBlxsu\fR \fIsu\fR, for \fBlxdoas\fR \fIdoas\fR).
.br
- -d|--sudo Use \fIsudo\fR as backend (default for \fBlxqt-sudo\fR & \fBlxsudo\fR is \fIsudo\fR, for \fBlxsu\fR is \fIsu\fR).
+ -a|--doas Use \fIdoas\fR as backend (default for \fBlxqt-sudo\fR & \fBlxsudo\fR is \fIsudo\fR, for \fBlxsu\fR \fIsu\fR, for \fBlxdoas\fR \fIdoas\fR).
.SH "REPORTING BUGS"
Report bugs to https://github.com/lxqt/lxqt/issues
.SH "SEE ALSO"
-\fBsudo(8)\fR \fBsu(1)\fR
+\fBsudo(8)\fR \fBsu(1)\fR \fBdoas(1)\fR
.SH AUTHOR
This manual page was created by \fBPalo Kisa\fR \fI<palo.kisa@gmail.com>\fR
for \fBLXQt\fR project.
diff --git a/sudo.cpp b/sudo.cpp
index a70db32..d12f77c 100644
--- a/sudo.cpp
+++ b/sudo.cpp
@@ -61,9 +61,11 @@ namespace
const QString app_version{QStringLiteral(LXQT_VERSION)};
const QString app_lxsu{QStringLiteral(LXQTSUDO_LXSU)};
const QString app_lxsudo{QStringLiteral(LXQTSUDO_LXSUDO)};
+ const QString app_lxdoas{QStringLiteral(LXQTSUDO_LXDOAS)};
const QString su_prog{QStringLiteral(LXQTSUDO_SU)};
const QString sudo_prog{QStringLiteral(LXQTSUDO_SUDO)};
+ const QString doas_prog{QStringLiteral(LXQTSUDO_DOAS)};
const QString pwd_prompt_end{QStringLiteral(": ")};
const QChar nl{QLatin1Char('\n')};
@@ -73,15 +75,16 @@ namespace
QTextStream(stderr) << err << '\n';
QTextStream(stdout)
<< QObject::tr("Usage: %1 option [command [arguments...]]\n\n"
- "GUI frontend for %2/%3\n\n"
+ "GUI frontend for %2/%3/%4\n\n"
"Arguments:\n"
" option:\n"
" -h|--help Print this help.\n"
" -v|--version Print version information.\n"
" -s|--su Use %3(1) as backend.\n"
" -d|--sudo Use %2(8) as backend.\n"
+ " -a|--doas Use %4(1) as backend.\n"
" command Command to run.\n"
- " arguments Optional arguments for command.\n\n").arg(app_master).arg(sudo_prog).arg(su_prog);
+ " arguments Optional arguments for command.\n\n").arg(app_master).arg(sudo_prog).arg(su_prog).arg(doas_prog);
if (!err.isEmpty())
QMessageBox(QMessageBox::Critical, app_master, err, QMessageBox::Ok).exec();
}
@@ -155,6 +158,8 @@ Sudo::Sudo()
mArgs.removeAt(0);
if (app_lxsu == cmd)
mBackend = BACK_SU;
+ else if (app_lxdoas == cmd)
+ mBackend = BACK_DOAS;
else if (app_lxsudo == cmd || app_master == cmd)
mBackend = BACK_SUDO;
mRet = mPwdFd = mChildPid = 0;
@@ -186,6 +191,10 @@ int Sudo::main()
{
mBackend = BACK_SUDO;
mArgs.removeAt(0);
+ } else if (QStringLiteral("-a") == arg1 || QStringLiteral("--doas") == arg1)
+ {
+ mBackend = BACK_DOAS;
+ mArgs.removeAt(0);
}
}
//any other arguments we simply forward to su/sudo
@@ -242,6 +251,7 @@ QString Sudo::backendName (backend_t backEnd)
switch (backEnd) {
case BACK_SU : rv = su_prog; break;
case BACK_SUDO : rv = sudo_prog; break;
+ case BACK_DOAS : rv = doas_prog; break;
//: shouldn't be actually used but keep as short as possible in translations just in case.
case BACK_NONE : rv = tr("unset");
}
@@ -251,8 +261,22 @@ QString Sudo::backendName (backend_t backEnd)
void Sudo::child()
{
- int params_cnt = 3 //1. su/sudo & "shell command" & last nullptr
- + (BACK_SU == mBackend ? 1 : 3); //-c for su | -E /bin/sh -c for sudo
+ int params_cnt = 3; //su/sudo & "shell command" & last nullptr
+ switch (mBackend)
+ {
+ case BACK_SU:
+ params_cnt += 1; // -c for su
+ break;
+ case BACK_SUDO:
+ params_cnt += 3; // --preserve-env=... /bin/sh -c for sudo
+ break;
+ case BACK_DOAS:
+ params_cnt += 2; // /bin/sh -c for sudo
+ break;
+ case BACK_NONE:
+ break;
+ }
+
std::unique_ptr<char const *[]> params{new char const *[params_cnt]};
const char ** param_arg = params.get() + 1;
@@ -269,6 +293,9 @@ void Sudo::child()
*(param_arg++) = preserve_env_param.c_str(); //preserve environment
*(param_arg++) = "/bin/sh";
break;
+ case BACK_DOAS:
+ *(param_arg++) = "/bin/sh";
+ [[fallthrough]];
case BACK_SU:
case BACK_NONE:
env_workarounds();
diff --git a/sudo.h b/sudo.h
index 21905ee..d81f8ab 100644
--- a/sudo.h
+++ b/sudo.h
@@ -44,6 +44,7 @@ public:
BACK_NONE
, BACK_SUDO
, BACK_SU
+ , BACK_DOAS
};
public:
diff --git a/translations/lxqt-sudo_ca.ts b/translations/lxqt-sudo_ca.ts
index 967e75e..4600a50 100644
--- a/translations/lxqt-sudo_ca.ts
+++ b/translations/lxqt-sudo_ca.ts
@@ -31,7 +31,7 @@
<message>
<location filename="../passworddialog.ui" line="109"/>
<source>A program LXQt sudo calls in background to elevate privileges.</source>
- <translation type="unfinished">Un programa LXQt sudo demana en segon pla elevar privilegis.</translation>
+ <translation>Un programa LXQt sudo demana en segon pla elevar privilegis.</translation>
</message>
<message>
<location filename="../passworddialog.ui" line="119"/>
diff --git a/translations/lxqt-sudo_it.ts b/translations/lxqt-sudo_it.ts
index 20700a6..0f883db 100644
--- a/translations/lxqt-sudo_it.ts
+++ b/translations/lxqt-sudo_it.ts
@@ -31,7 +31,7 @@
<message>
<location filename="../passworddialog.ui" line="109"/>
<source>A program LXQt sudo calls in background to elevate privileges.</source>
- <translation>Chiamata in background da un programma LXQt sudo per elevare i privilegi.</translation>
+ <translation type="unfinished">Chiamata in background da un programma LXQt sudo per elevare i privilegi.</translation>
</message>
<message>
<location filename="../passworddialog.ui" line="119"/>
diff --git a/translations/lxqt-sudo_oc.ts b/translations/lxqt-sudo_oc.ts
new file mode 100644
index 0000000..4c9e6c0
--- /dev/null
+++ b/translations/lxqt-sudo_oc.ts
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="oc">
+<context>
+ <name>PasswordDialog</name>
+ <message>
+ <location filename="../passworddialog.ui" line="6"/>
+ <source>LXQt sudo</source>
+ <translation>sudo de LXQt</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="42"/>
+ <source>Copy command to clipboard</source>
+ <translation>Copiar la comanda al quichapapièrs</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="45"/>
+ <source>&Copy</source>
+ <translation>&Copiar</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="83"/>
+ <source>The requested action needs administrative privileges.<br>Please enter your password.</source>
+ <translation>L’accion demandada requerís los privilègis administratius.<br>Picatz lo senhal.</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="106"/>
+ <source>LXQt sudo backend</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="109"/>
+ <source>A program LXQt sudo calls in background to elevate privileges.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="119"/>
+ <source>Command:</source>
+ <translation>Comanda :</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="126"/>
+ <source>Password:</source>
+ <translation>Senhal :</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.ui" line="133"/>
+ <source>Enter password</source>
+ <translation>Picar lo senhal</translation>
+ </message>
+ <message>
+ <location filename="../passworddialog.cpp" line="60"/>
+ <source>Attempt #%1</source>
+ <translation>Ensag #%1</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../sudo.cpp" line="75"/>
+ <source>Usage: %1 option [command [arguments...]]
+
+GUI frontend for %2/%3
+
+Arguments:
+ option:
+ -h|--help Print this help.
+ -v|--version Print version information.
+ -s|--su Use %3(1) as backend.
+ -d|--sudo Use %2(8) as backend.
+ command Command to run.
+ arguments Optional arguments for command.
+
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="92"/>
+ <source>%1 version %2
+</source>
+ <translation>%1 version %2
+</translation>
+ </message>
+</context>
+<context>
+ <name>Sudo</name>
+ <message>
+ <location filename="../sudo.cpp" line="195"/>
+ <source>%1: no command to run provided!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="202"/>
+ <source>%1: no backend chosen!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="219"/>
+ <source>Syscall error, failed to fork: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="246"/>
+ <source>unset</source>
+ <extracomment>shouldn't be actually used but keep as short as possible in translations just in case.</extracomment>
+ <translation>pas definit</translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="295"/>
+ <source>%1: Detected attempt to inject privileged command via LC_ALL env(%2). Exiting!
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="337"/>
+ <source>Syscall error, failed to bring pty to non-block mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="345"/>
+ <source>Syscall error, failed to fdopen pty: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="314"/>
+ <source>%1: Failed to exec '%2': %3
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sudo.cpp" line="376"/>
+ <source>Child '%1' process failed!
+%2</source>
+ <translation>Fracàs del processús filh « %1 » !
+%2</translation>
+ </message>
+</context>
+</TS>
More details
Historical runs
- missing-cmake-config: Missing CMake package configuration for lxqt (version 1.3.0)
- new-upstream-tarball-missing: New upstream version (lxqt-sudo/1.1.0+ds) found, but was missing when retrieved as tarball from <UScanSource(<GitWorkingTree of /tmp/janitor066fvy3c/lxqt-sudo>, subpath='', top_level=False, auto_fix=True)>.
- codemod-command-failed: Script ['deb-new-upstream', '--refresh-patches'] failed to run with code 1
- upstream-merged-conflicts: Merging upstream version 1.1.0 resulted in conflicts.
- upstream-merged-conflicts: Merging upstream version 1.1.0 resulted in conflicts.
- build-failed-stage-explain-bd-uninstallable: build failed stage explain-bd-uninstallable