Mail Archives: cygwin/2009/03/25/05:12:48
Hi again,
Chuck and Corinna, can you please take a look at this?
On Fri, Mar 20, 2009 at 20:12, Julio Emanuel wrote:
[snip]
>
> Chuck, if this is the old 'time compression' problem :) I could try to
> help and see if I send a patch to your evaluation.
> I just don't want to take something in hands that someone else has
> already started to work on, or simply does not agree with my view.
>
> Standing by...
>
Timeout! :)
Now, contradicting myself... there you have: a -f (force) option to
the csih_select_privileged_username function!
This way nothing breaks regarding current clients of csih.
And it only takes a minor change in new/upgraded clients to make use of this.
Here is the patch to csih:
~/cygsetup/addons/usr/bin $ cygcheck -c csih
Cygwin Package Information
Package Version Status
csih 0.1.8-1 OK
~/cygsetup/addons/usr/share/csih $ diff -u
/usr/src/csih-0.1.8-1/origsrc/csih-0.1.8/cygwin-service-installation-helper.sh
cygwin-service-installation-helper.sh
========= [Cut here] ===================
--- /usr/src/csih-0.1.8-1/origsrc/csih-0.1.8/cygwin-service-installation-helper.sh
2008-08-20 19:35:38.000000000 +0100
+++ cygwin-service-installation-helper.sh 2009-03-24
14:47:39.346570600 +0000
@@ -2071,7 +2071,7 @@
# ======================================================================
-# Routine: csih_select_privileged_username [-q] [service_name]
+# Routine: csih_select_privileged_username [-q] [-f] [service_name]
# On NT and above, get the desired privileged account name.
#
# If the optional argument '-q' is specified, then this function will
@@ -2079,6 +2079,10 @@
# scripts that need information ABOUT a service, but do not
# themselves install the service.
#
+# If the optional argument '-f' is specified, then no confirmation
+# questions will be asked about the selected username. This is
+# useful mainly in unattended installations.
+#
# If the optional [service_name] argument is present, then that value
# may be used in some of the messages. Also, this function will
# then check to see if [service_name] is already installed. If so,
@@ -2087,6 +2091,7 @@
# etc)
#
# Usually [service_name] and [-q] should be specified together.
+# [-f] can be set regardless of others options.
#
# SETS GLOBAL VARIABLE:
# csih_PRIVILEGED_USERNAME
@@ -2116,6 +2121,7 @@
$_csih_trace
local username
local opt_query=0
+ local opt_force=0
local opt_servicename=""
local options
@@ -2123,9 +2129,10 @@
# always parse "command line"
OPTIND=0
- while getopts ":q" options; do
+ while getopts ":qf" options; do
case $options in
q ) opt_query=1 ;;
+ f ) opt_force=1 ;;
\? ) csih_warning "${FUNCNAME[0]} ignoring invalid option: $OPTARG" ;;
\: ) csih_warning "${FUNCNAME[0]} ignoring option missing
required argument: $OPTARG" ;;
esac
@@ -2264,27 +2271,23 @@
echo ""
csih_inform "This script plans to use '${username}'."
csih_inform "'${username}' will only be used by registered services."
- if csih_request "Do you want to use a different name?"
+ if [ $opt_force -eq 0 ]
then
- csih_get_value "Enter the new user name:"
- username="${csih_value}"
- fi
- else
- if [ -z "${opt_servicename}" ]
- then
- csih_inform "This script will assume that the service will
run under the"
- csih_inform "'${username}' account."
- if csih_request "Will the service run under a different account?"
+ if csih_request "Do you want to use a different name?"
then
- csih_get_value "Enter the user name used by the service:"
+ csih_get_value "Enter the new user name:"
username="${csih_value}"
fi
- else
- csih_inform "This script will assume that ${opt_servicename}
will run under the"
- csih_inform "'${username}' account."
- if csih_request "Will ${opt_servicename} run under a
different account?"
+ fi
+ else
+ theservice=${opt_servicename:-the service}
+ csih_inform "This script will assume that ${theservice} will
run under the"
+ csih_inform "'${username}' account."
+ if [ $opt_force -eq 0 ]
+ then
+ if csih_request "Will ${theservice} run under a different account?"
then
- csih_get_value "Enter the user name used by ${opt_servicename}:"
+ csih_get_value "Enter the user name used by ${theservice}:"
username="${csih_value}"
fi
fi
@@ -2332,6 +2335,12 @@
# create a new privileged user.
# $1 (optional) will be used as the password if non-empty
#
+# NOTE: For using special behaviours triggered by optional parameters
+# to the csih_select_privileged_username function, you should first
+# call that function with all required parameters, and then call this
+# function. The selected username will already be stored in
+# $csih_PRIVILEGED_USERNAME.
+#
# Exits on catastrophic error (or if user enters empty password)
# Returns 0 on total success
# Returns 1 on partial success (created user, but could not add
========= [Cut here] ===================
And as and example of client usage, my patch to ssh-host-config to
make it really unattended (also has a minor typo correction):
~/cygsetup/addons/usr/bin $ cygcheck -c openssh
Cygwin Package Information
Package Version Status
openssh 5.2p1-1 OK
~/cygsetup/addons/usr/bin $ diff -u
/usr/src/openssh-5.2p1-1/contrib/cygwin/ssh-host-config
ssh-host-config
========= [Cut here] ===================
--- /usr/src/openssh-5.2p1-1/contrib/cygwin/ssh-host-config
2009-01-29 20:40:30.001000000 +0000
+++ ssh-host-config 2009-03-24 15:09:30.000000000 +0000
@@ -287,6 +287,9 @@
csih_inform "sshd requires. You need to have or to create a
privileged"
csih_inform "account. This script will help you do so."
echo
+
+ # Try to discover a privileged user, if possible the one
already used by sshd
+ csih_select_privileged_username ${with_force} sshd
if ! csih_create_privileged_user "${password_value}"
then
csih_error_recoverable "There was a serious problem
creating a privileged user."
@@ -432,6 +435,10 @@
csih_FORCE_PRIVILEGED_USER=yes
;;
+ -f | --force )
+ with_force=-f
+ ;;
+
*)
echo "usage: ${progname} [OPTION]..."
echo
@@ -441,6 +448,7 @@
echo " --debug -d Enable shell's debug output."
echo " --yes -y Answer all questions with \"yes\"
automatically."
echo " --no -n Answer all questions with \"no\"
automatically."
+ echo " --force -f Don't ask confirmation for sshd
account name."
echo " --cygwin -c <options> Use \"options\" as value for
CYGWIN environment var."
echo " --port -p <n> sshd listens on port n."
echo " --pwd -w <passwd> Use \"pwd\" as password for
privileged user."
@@ -489,7 +497,7 @@
fi
# Create /var/empty file used as chroot jail for privilege separation
-csih_make_dir "${LOCALSTATEDIR}/empty" "Cannot create log directory."
+csih_make_dir "${LOCALSTATEDIR}/empty" "Cannot create chroot jail
base directory."
chmod 755 "${LOCALSTATEDIR}/empty"
setfacl -m u:system:rwx "${LOCALSTATEDIR}/empty"
========= [Cut here] ===================
With those patches, you can configure ssh in a snap:
ssh-host-config --yes --force --privileged --pwd "$PASS" --cygwin ''
ssh-user-config --yes --privileged --passphrase "$MYPHRASE"
Hope you can make something useful from these patches, because I think
this helps cygwin getting more 'smooth' in configuration activities.
Have fun!
___________
Julio Costa
George Burns - "Don't stay in bed, unless you can make money in bed."
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -