commit 01a5b19305c0001c6ced2b2e6185da557ada01c3
parent 8f395b3eb5e335a32dbc3afbd82a174d999cc46c
Author: Wim Dupont <wim@wimdupont.com>
Date: Sun, 6 Jul 2025 10:18:05 +0200
added errormessages and ability to disable sudo
Diffstat:
2 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/cex.c b/cex.c
@@ -57,6 +57,7 @@ static void update_child_win(void);
static void print_top_title(void);
static void print_bot_title(void);
static void print_content(void);
+static void print_error(size_t size, const char *fmt, ...);
static void show_file_mime(void);
static void select_file(const char *path);
static void exe_selection(SelAction action, const char *askn);
@@ -768,6 +769,22 @@ print_content(void)
}
void
+print_error(size_t size, const char *fmt, ...)
+{
+ va_list ap;
+ char msg[size];
+
+ va_start(ap, fmt);
+ vsnprintf(msg, size, fmt, ap);
+ va_end(ap);
+
+ move(maxy-1, 0);
+ clrtoeol();
+ addstr(msg);
+ print_bot = FALSE;
+}
+
+void
show_file_mime(void)
{
int appsize = 256;
@@ -1340,9 +1357,15 @@ void
run_sudo_command(size_t size, const char *fmt, ...)
{
va_list ap;
- char cmd[size];
+ char cmd[size], *msg;
sigset_t set;
+ if (!USE_SUDO_COMMANDS) {
+ msg = "Requires sudo command but USE_SUDO_COMMANDS is disabled.";
+ print_error(strlen(msg), msg);
+ return;
+ }
+
endwin();
if (sigemptyset (&set) == -1)
@@ -1421,10 +1444,7 @@ rm_file(const char *fname)
msg = "Could not remove file.";
break;
}
- move(maxy-1, 0);
- clrtoeol();
- addstr(msg);
- print_bot = FALSE;
+ print_error(strlen(msg), msg);
}
return res;
@@ -1472,16 +1492,22 @@ make_chown(void)
struct passwd *usr;
struct group *grp;
long len = sysconf(_SC_LOGIN_NAME_MAX);
- char owner[len], group[len];
+ char owner[len], group[len], *err;
prompt_answer(owner, len, "Owner name? ");
prompt_answer(group, len, "Group name? ");
- if ((usr = getpwnam(owner)) == NULL)
+ if ((usr = getpwnam(owner)) == NULL) {
+ err = "No results found for owner %s.";
+ print_error(strlen(err) + len, err, owner);
return -1;
+ }
- if ((grp = getgrnam(group)) == NULL)
+ if ((grp = getgrnam(group)) == NULL) {
+ err = "No results found for group %s.";
+ print_error(strlen(err) + len, err, group);
return -1;
+ }
if ((chown(curwin.winfiles[curwin.highlight].d_name, usr->pw_uid, grp->gr_gid)) != 0) {
switch (errno) {
@@ -1490,6 +1516,8 @@ make_chown(void)
sudo_chown(owner, group, len);
break;
default:
+ err = "Error during chown: %d.";
+ print_error(strlen(err), err, errno);
return errno;
}
}
diff --git a/config.def.h b/config.def.h
@@ -8,6 +8,7 @@
#define BORDER_SPACE_SIZE 2
#define SEARCHLEN 20
#define LN_ACCESS_DIR "$HOME/access"
+#define USE_SUDO_COMMANDS 1
#define KEY_QUIT 'q'
#define KEY_VUP 'k'