summaryrefslogtreecommitdiffstats
path: root/packaging/Caldera/OpenServer/initconfig
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/Caldera/OpenServer/initconfig')
-rwxr-xr-xpackaging/Caldera/OpenServer/initconfig254
1 files changed, 254 insertions, 0 deletions
diff --git a/packaging/Caldera/OpenServer/initconfig b/packaging/Caldera/OpenServer/initconfig
new file mode 100755
index 00000000000..518d5962c43
--- /dev/null
+++ b/packaging/Caldera/OpenServer/initconfig
@@ -0,0 +1,254 @@
+#!/bin/sh
+# Initial configuration script for Samba.
+# This script should be run once, immediately after Samba is installed,
+# to get a basic smb.conf script into place. Subsequent modification
+# of this initial configuration should be done by swat.
+#
+# It is expected that in future versions of Samba, swat will be able to
+# do the initial configuration as well, and this script will become
+# unnecessary.
+
+CONF_SRC=/etc/samba.d/smb.conf.default
+CONF=/etc/samba.d/smb.conf
+
+# getyn: ask a question, return value indicates response
+
+getyn () {
+ while true; do
+ echo "$1 [$2] \c"
+ read answer
+ [ -z "$answer" ] && answer=$2
+
+ case $answer in
+ [Yy]*) echo; return 0;
+ ;;
+ [Nn]*) echo; return 1;
+ ;;
+ *) echo "Please answer yes or no."
+ continue
+ ;;
+ esac
+ done
+}
+
+# conf_replace: call sed to replace strings in smb.conf file with new
+# values, and if necessary uncomment the lines in which those strings
+# appear. For this to work, the source file needs to contain unique
+# placeholder strings to be replaced, e.g., %%WORKGROUP%%
+
+conf_replace () {
+ sed -e 's/^;*\(.*\)'$1'\(.*\)$/\1'$2'\2/' < $CONF > /tmp/smb.conf.$$
+ cp -f /tmp/smb.conf.$$ $CONF
+ rm -f /tmp/smb.conf.$$
+}
+
+# Begin main
+
+# Check whether conf file has already been edited
+if [ -f $CONF ]; then
+ cmp -s $CONF_SRC $CONF || {
+ echo "The file $CONF appears to have been previously edited.
+If you continue, this file will be restored to its original
+state and any changes you have made may be lost.\n"
+ if getyn "Continue?" No; then
+ echo "Backing up $CONF to ${CONF}-\n"
+ cp -f $CONF ${CONF}-
+ cp -f $CONF_SRC $CONF
+ else
+ exit 0
+ fi
+ }
+else
+ cp -f $CONF_SRC $CONF
+fi
+
+# Question 1: Workgroup/Domain Name
+# Default is MYGROUP. Responses must begin with an alphabetical
+# character and contain no punctuation.
+while true; do
+ default=MYGROUP
+ echo "Enter Workgroup/NT-Domain name: [$default] \c"
+ read workgroup
+
+ if [ -z "$workgroup" ]; then
+ workgroup=$default
+ fi
+
+ set -- $workgroup
+ if [ $# -gt 1 ]; then
+ echo "ERROR: Workgroup names cannot contain spaces or punctuation.\n"
+ continue
+ fi
+
+ workgroup=`echo $workgroup | tr a-z A-Z | tr -d [:punct:]`
+ if expr "$workgroup" : '[^A-Z]' >&-; then
+ echo "ERROR: Workgroup name must begin with an alphabetic character.\n"
+ continue
+ fi
+
+ echo "Workgroup name set to \"$workgroup\".\n"
+
+ break
+done
+
+
+# Question 2: Machine Name
+# Default is the uname, forced to capital letters and with punctuation
+# excised. Responses must begin with an alphabetical
+# character and contain no punctuation.
+while true; do
+ default=`uname -n | tr a-z A-Z | tr -d [:punct:]`
+ echo "Enter Machine name: [$default] \c"
+ read name
+
+ if [ -z "$name" ]; then
+ name=$default
+ fi
+
+ set -- $name
+ if [ $# -gt 1 ]; then
+ echo "ERROR: Machine names cannot contain spaces or punctuation.\n"
+ continue
+ fi
+
+ name=`echo $name | tr a-z A-Z | tr -d [:punct:]`
+ if expr "$name" : '[^A-Z]' >&-; then
+ echo "ERROR: Machine name must begin with an alphabetic character.\n"
+ continue
+ fi
+
+ echo "Machine name set to \"$name\".\n"
+
+ break
+done
+
+# Question 3: use WINS?
+wins=false
+if getyn "Will this system use WINS (recommended)?" Yes; then
+ wins=true
+fi
+
+# Optional questions, asked only if WINS will be used
+if [ "$wins" = "true" ]; then
+ # Question 3.1: Are we the WINS server?
+ echo "NOTE: A workgroup can have only one WINS server."
+ wins_svr=false
+ if getyn "Will this system be the WINS server for your workgroup?" No; then
+ wins_svr=true
+ fi
+
+ # Question 3.2: Who is the WINS server?
+ if [ "$wins_svr" = "false" ]; then
+ while true; do
+ echo "Enter the address of the primary WINS server for your workgroup: \c"
+ read wins_addr
+
+ if expr "$wins_addr" : '[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$' >&- ; then
+ echo
+ break
+ fi
+
+ echo "ERROR: Invalid IP address format.\n"
+ done
+ fi
+fi
+
+# Question 4: Which interfaces will be active?
+iflist=`ifconfig -a | grep -v LOOPBACK | grep '^[^ ]*:' | cut -f1 -d:`
+
+set -- $iflist
+if [ "$#" -eq 0 ]; then
+ echo "FATAL ERROR: No network interfaces"
+ exit 1
+elif [ "$#" -eq 1 ]; then
+ interfaces=$1
+else
+ while true; do
+ interfaces=""
+ echo "Which of the following interfaces should Samba run on?\n"
+ for i in $iflist; do
+ addr=`ifconfig $i | grep "inet " | sed 's/inet \([^ ]*\) .*$/\1/'`
+ echo "\t$i:\t$addr"
+ done
+ echo "\nList all interfaces to activate (e.g., net0, net1, etc): \c"
+ read response
+ for i in $response; do
+ found=false
+ for j in $iflist; do
+ if [ "$i" = "$j" ]; then
+ found=true
+ break
+ fi
+ done
+ if [ "$found" = "true" ]; then
+ interfaces="$interfaces $j"
+ else
+ echo "ERROR: Invalid interface name $i\n"
+ continue 2
+ fi
+ done
+
+ interfaces="$interfaces lo0 atl0"
+ break
+ done
+fi
+
+# Question 5: Are we part of an existing security domain or active # directory?
+domain_exists=false
+if getyn "Will this system be part of a currently existing Microsoft Security\n\
+Domain or Active Directory?" No; then
+ domain_exists=true
+fi
+
+# Optional questions, depending on response to question 5
+if [ "$domain_exists" = "true" ]; then
+ # Question 5.1: (if yes to 5) Who's the PDC?
+ default='*'
+ echo "Enter the name of the Primary Domain Controller: [*] \c"
+ read pdc
+ if [ -z "$pdc" ]; then
+ pdc=$default
+ else
+ pdc=`echo $pdc | tr a-z A-Z | tr -d [:punct:]`
+ fi
+ echo "Primary Domain Controller set to \"$pdc\".\n"
+else
+ # Question 5.2: (if no to 5) Are we going to be the PDC?
+ domain_master=false
+ if getyn "Will this system be the domain controller for a new Microsoft\n\
+Security Domain?" No; then
+ domain_master=true
+ fi
+fi
+
+# Done asking questions.
+# Edit conf file with new values
+conf_replace %%WORKGROUP%% "$workgroup"
+conf_replace %%NBNAME%% "$name"
+
+if [ "$wins" = true ]; then
+ if [ "$wins_svr" = true ]; then
+ conf_replace %%WINSSUPPORT%% yes
+ else
+ conf_replace %%WINSSERVER%% $wins_addr
+ fi
+fi
+
+conf_replace %%INTERFACES%% "$interfaces"
+conf_replace %%BINDONLY%% yes
+
+if [ "$domain_exists" = true ]; then
+ conf_replace %%SECURITY%% domain
+ conf_replace %%PWSERVER%% "$pdc"
+else
+ conf_replace %%SECURITY%% user
+fi
+
+if [ "$domain_master" = true ]; then
+ conf_replace %%DOMAINMASTER%% yes
+ conf_replace %%DOMAINLOGONS%% yes
+ conf_replace %%OSLEVEL%% 33
+else
+ conf_replace %%OSLEVEL%% 20
+fi
+