r10190: Do some very basic input checking when provisioning.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 12 Sep 2005 23:52:25 +0000 (23:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:38:06 +0000 (13:38 -0500)
(This used to be commit 87f25fe49caa78422582337c5208a331ef5b8c15)

source4/pidl/pidl.1.xml
source4/script/build_idl.sh
source4/scripting/libjs/provision.js
source4/setup/provision
source4/setup/provision.zone
swat/install/provision.esp

index 4ddc267..2ac40ef 100644 (file)
@@ -30,7 +30,6 @@
                <arg choice="opt">--server</arg>
                <arg choice="opt">--dcom-proxy</arg>
                <arg choice="opt">--com-header</arg>
-               <arg choice="opt">--odl</arg>
                <arg choice="opt">--warn-compat</arg>
                <arg choice="opt">--quiet</arg>
                <arg choice="opt">--verbose</arg>
index 668d5df..39157a5 100755 (executable)
@@ -6,7 +6,7 @@ PIDL_EXTRA_ARGS="$*"
 
 [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1
 
-PIDL="$PERL ./pidl/pidl --outputdir librpc/gen_ndr --ndr-header --header --ndr-parser --server --client --dcom-proxy --com-header --swig --odl --ejs $PIDL_EXTRA_ARGS"
+PIDL="$PERL ./pidl/pidl --outputdir librpc/gen_ndr --ndr-header --header --ndr-parser --server --client --dcom-proxy --com-header --swig --ejs $PIDL_EXTRA_ARGS"
 
 if [ x$FULLBUILD = xFULL ]; then
       echo Rebuilding all idl files in librpc/idl
index ef99dc4..33bfafa 100644 (file)
@@ -233,7 +233,9 @@ function provision(subobj, message, blank, paths)
        subobj.REALM       = strlower(subobj.REALM);
        subobj.HOSTNAME    = strlower(subobj.HOSTNAME);
        subobj.DOMAIN      = strupper(subobj.DOMAIN);
+       assert(valid_netbios_name(subobj.DOMAIN));
        subobj.NETBIOSNAME = strupper(subobj.HOSTNAME);
+       assert(valid_netbios_name(subobj.NETBIOSNAME));
        var rdns = split(",", subobj.BASEDN);
        subobj.RDN_DC = substr(rdns[0], strlen("DC="));
 
@@ -431,5 +433,29 @@ member: %s
        return enable_account(ldb, user_dn);
 }
 
+// Check whether a name is valid as a NetBIOS name. 
+// FIXME: There are probably more constraints here
+function valid_netbios_name(name)
+{
+       if (strlen(name) > 13) return false;
+       if (strstr(name, ".")) return false;
+       return true;
+}
+
+function provision_validate(subobj, message)
+{
+       if (!valid_netbios_name(subobj.DOMAIN)) {
+               message("Invalid NetBIOS name for domain\n");
+               return false;
+       }
+
+       if (!valid_netbios_name(subobj.NETBIOSNAME)) {
+               message("Invalid NetBIOS name for host\n");
+               return false;
+       }
+
+       return true;
+}
+
 
 return 0;
index fd949ce..44b7ee7 100755 (executable)
@@ -108,6 +108,11 @@ for (r in options) {
 
 var blank = (options["blank"] != undefined);
 
+if (!provision_validate(subobj, message)) {
+       return -1;
+}
+
+
 message("Provisioning for %s in realm %s\n", subobj.DOMAIN, subobj.REALM);
 message("Using administrator password: %s\n", subobj.ADMINPASS);
 provision(subobj, message, blank, provision_default_paths(subobj));
index 0f5764d..40cb78f 100644 (file)
@@ -1,4 +1,4 @@
-; generate by provision.pl
+; generated by provision.pl
 $ORIGIN ${DNSDOMAIN}.
 $TTL 1W
 @               IN SOA  @   hostmaster (
index de823dd..5f91451 100644 (file)
@@ -58,6 +58,8 @@ if (form['submit'] == "Provision") {
        } else if (subobj.ADMINPASS == "") {
                write("<h3>You must choose an administrator password.  Please try again.</h3>");
                f.display();
+       } else if (!provision_validate(subobj, writefln)) {
+               f.display();
        } else {
                provision(subobj, writefln, false, provision_default_paths(subobj));
        }