Pseudo- Sudo on Cygwin/bash

0

1

I need sudo to work, well not sudo itself but a way of allowing the sudo commands to work as described here.

This would be great however the sudo lines have extra arguments, like :

sudo -u user bash -c 'uptime'

And if I were to use the bash in the link above I simply get the output

/usr/bin/sudo: line 3: -u: command not found

Is there anyway around this? To make it run from the quote, instead of perhaps -c.

Marcus Hughes

Posted 2011-11-09T10:12:40.307

Reputation: 242

Answers

1

If you're sure that the command that's sent will always look exactly like

sudo -u user command...

then your fake sudo script can just throw out its first two arguments:

#!/bin/bash
shift 2
exec "$@"

Otherwise, you have to do a little argument parsing:

#!/bin/bash
while getopts :u: opt
do
  # normally you'd process options and arguments here,
  # but in this case just ignore them
done
shift $((OPTIND-1))  # throw out processed options and arguments
exec "$@"

getopts reads and returns command-line options and arguments, until there are no more. You can read about it in bash(1) (man bash) if you want to know more about how to process the command-line arguments.

Andrew Schulman

Posted 2011-11-09T10:12:40.307

Reputation: 2 696

The lines are sent remotely, and they're in that format. The user they run from is not important in this case, just need the rest to execute – Marcus Hughes – 2011-11-09T10:29:06.807

OK, I see. Updated. – Andrew Schulman – 2011-11-09T10:39:12.817

0

This is what I used for sudo to run Ansible under babun:

#!/bin/bash
count=0

for var in "$@"
  do
    (( count++ ))
  done

shift $count
exec "$@"

Jonathan Le

Posted 2011-11-09T10:12:40.307

Reputation: 1

Maybe you can use $# for the count. # Expands to the number of positional parameters in decimal. – Hastur – 2015-04-25T12:14:26.753