Print this page
patch zone-auto-create-be

@@ -21,10 +21,11 @@
 
 /*
  * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, Joyent, Inc. All rights reserved.
  * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2015 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
  */
 
 #include <assert.h>
 #include <dirent.h>
 #include <errno.h>

@@ -83,10 +84,11 @@
 #define DTD_ELEM_VERIFY_CFG     ((const xmlChar *) "verify_cfg")
 #define DTD_ELEM_VERIFY_ADM     ((const xmlChar *) "verify_adm")
 
 #define DTD_ATTR_ALLOWEXCL      ((const xmlChar *) "allow-exclusive-ip")
 #define DTD_ATTR_ARCH           ((const xmlChar *) "arch")
+#define DTD_ATTR_AUTO_CREATE_BE ((const xmlChar *) "auto-create-be")
 #define DTD_ATTR_DIRECTORY      ((const xmlChar *) "directory")
 #define DTD_ATTR_IPTYPE         ((const xmlChar *) "ip-type")
 #define DTD_ATTR_MATCH          ((const xmlChar *) "match")
 #define DTD_ATTR_MODE           ((const xmlChar *) "mode")
 #define DTD_ATTR_NAME           ((const xmlChar *) "name")

@@ -97,10 +99,11 @@
 #define DTD_ATTR_SPECIAL        ((const xmlChar *) "special")
 #define DTD_ATTR_TARGET         ((const xmlChar *) "target")
 #define DTD_ATTR_TYPE           ((const xmlChar *) "type")
 
 #define DTD_ENTITY_TRUE         "true"
+#define DTD_ENTITY_FALSE        "false"
 
 static volatile boolean_t       libbrand_initialized = B_FALSE;
 static char                     i_curr_arch[MAXNAMELEN];
 static char                     i_curr_zone[ZONENAME_MAX];
 

@@ -752,10 +755,38 @@
         xmlFree(allow_excl);
 
         return (ret);
 }
 
+boolean_t
+brand_auto_create_be(brand_handle_t bh)
+{
+        struct brand_handle     *bhp = (struct brand_handle *)bh;
+        xmlNodePtr              node;
+        xmlChar                 *auto_create_be;
+        boolean_t               ret;
+
+        assert(bhp != NULL);
+
+        if ((node = xmlDocGetRootElement(bhp->bh_platform)) == NULL)
+                return (B_FALSE);
+
+        auto_create_be = xmlGetProp(node, DTD_ATTR_AUTO_CREATE_BE);
+        if (auto_create_be == NULL)
+                return (B_FALSE);
+
+        /* Note: only return B_FALSE if it's "false" */
+        if (strcmp((char *)auto_create_be, DTD_ENTITY_FALSE) == 0)
+                ret = B_FALSE;
+        else
+                ret = B_TRUE;
+
+        xmlFree(auto_create_be);
+
+        return (ret);
+}
+
 /*
  * Iterate over brand privileges
  *
  * Walks the brand config, searching for <privilege> elements, calling the
  * specified callback for each.  Returns 0 on success, or -1 on failure.