Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pacman/pacman.c18
-rw-r--r--src/pacman/util.c19
-rw-r--r--src/pacman/util.h1
3 files changed, 23 insertions, 15 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index e13689cc..c57d3464 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -775,21 +775,9 @@ int main(int argc, char *argv[])
#if defined(HAVE_GETEUID)
/* check if we have sufficient permission for the requested operation */
- if(myuid > 0) {
- if(config->op != PM_OP_MAIN && config->op != PM_OP_QUERY && config->op != PM_OP_DEPTEST) {
- if((config->op == PM_OP_SYNC && !config->op_s_sync &&
- (config->op_s_search || config->group || config->op_q_list || config->op_q_info
- || config->flags & PM_TRANS_FLAG_PRINTURIS))
- || config->op == PM_OP_DEPTEST
- || (strcmp(alpm_option_get_root(), "/") != 0)) {
- /* special case: PM_OP_SYNC can be used w/ config->op_s_search by any user */
- /* special case: ignore root user check if -r is specified, fall back on
- * normal FS checking */
- } else {
- pm_printf(PM_LOG_ERROR, _("you cannot perform this operation unless you are root.\n"));
- cleanup(EXIT_FAILURE);
- }
- }
+ if(myuid > 0 && needs_transaction()) {
+ pm_printf(PM_LOG_ERROR, _("you cannot perform this operation unless you are root.\n"));
+ cleanup(EXIT_FAILURE);
}
#endif
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 8bf4ec14..4cb93156 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -45,6 +45,25 @@
extern config_t *config;
+int needs_transaction()
+{
+ if(config->op != PM_OP_MAIN && config->op != PM_OP_QUERY && config->op != PM_OP_DEPTEST) {
+ if((config->op == PM_OP_SYNC && !config->op_s_sync &&
+ (config->op_s_search || config->group || config->op_q_list || config->op_q_info
+ || config->flags & PM_TRANS_FLAG_PRINTURIS))
+ || config->op == PM_OP_DEPTEST
+ || (strcmp(alpm_option_get_root(), "/") != 0)) {
+ /* special case: PM_OP_SYNC can be used w/ config->op_s_search by any user */
+ /* special case: ignore root user check if -r is specified, fall back on
+ * normal FS checking */
+ return(0);
+ } else {
+ return(1);
+ }
+ }
+ return(0);
+}
+
/* gets the current screen column width */
int getcols()
{
diff --git a/src/pacman/util.h b/src/pacman/util.h
index 62812441..73347fe8 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -38,6 +38,7 @@
#define _(str) str
#endif
+int needs_transaction();
int getcols();
int makepath(const char *path);
int rmrf(const char *path);