From fef231404844ba34cfc0394db8967f0aa016763a Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Mon, 22 Dec 2014 20:32:58 +0000 Subject: [PATCH] chpwd, userv.rc: Change Userv service protocol to parse options properly. Options passed apparently to the service were actually being handled at top level, so you got the wrong help text if you said `userv chpwd list -h', for example. This is very bad. To fix this, we require the userv configuration to provide an explicit non-option token to terminate top-level option handling at the right time. --- chpwd | 4 +++- userv.rc | 6 ++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/chpwd b/chpwd index 9f483de..b4fc8f5 100755 --- a/chpwd +++ b/chpwd @@ -218,11 +218,13 @@ if __name__ == '__main__': with cli_errors(): OPTS, args = OPTPARSE.parse_args() + if not args or args[0] != 'userv': + raise U.ExpectedError, (500, 'missing userv token') CONF.loadconfig(OPTS.config) try: CU.set_user(ENV['USERV_USER']) except KeyError: raise ExpectedError, (500, 'USERV_USER unset') with OUT.redirect_to(O.FileOutput()): - OPTPARSE.dispatch('userv', [ENV['USERV_SERVICE']] + args) + OPTPARSE.dispatch('userv', [ENV['USERV_SERVICE']] + args[1:]) elif 'SSH_ORIGINAL_COMMAND' in ENV: ## This looks like an SSH request; but we present two different diff --git a/userv.rc b/userv.rc index 842940e..b062366 100644 --- a/userv.rc +++ b/userv.rc @@ -1,9 +1,7 @@ ### -*-conf-*- -if ( glob service help list source set reset clear - & grep service-user-shell /etc/shells - ) +if grep service-user-shell /etc/shells no-suppress-args no-set-environment - execute ./chpwd + execute ./chpwd userv fi -- 2.11.0