diff options
author | Aaron Griffin <aaronmgriffin@gmail.com> | 2007-09-27 23:03:35 -0500 |
---|---|---|
committer | Aaron Griffin <aaronmgriffin@gmail.com> | 2007-09-28 00:25:57 -0500 |
commit | 4942d216323cbe2f099c43893cc95368a3cd1197 (patch) | |
tree | ec99167060320472eb637a0ae99f7c3872bc6435 /src | |
parent | 50bb16e0151e31479cb2602c9749ffe18f7a3592 (diff) |
Break out transaction test to a separate function
Added needs_transaction, putting out "hey do we need root?" tests in one place.
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/pacman.c | 18 | ||||
-rw-r--r-- | src/pacman/util.c | 19 | ||||
-rw-r--r-- | src/pacman/util.h | 1 |
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); |