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.
with cli_errors():
OPTS, args = OPTPARSE.parse_args()
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()):
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
elif 'SSH_ORIGINAL_COMMAND' in ENV:
## This looks like an SSH request; but we present two different
-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
no-suppress-args
no-set-environment