Print this page
*** 126,147 ****
cp = buf;
if (*cp == '#') {
/* skip comment lines */
continue;
}
-
- /* zonename */
p = gettok(&cp);
if (*p == '\0' || strlen(p) >= ZONENAME_MAX) {
/*
* empty or very long zone names are not allowed
*/
continue;
}
(void) strlcpy(ze->zone_name, p, ZONENAME_MAX);
- /* state */
p = gettok(&cp);
if (*p == '\0') {
/* state field should not be empty */
continue;
}
--- 126,144 ----
*** 154,200 ****
ze->zone_state = ZONE_STATE_INSTALLED;
} else {
continue;
}
- /* zonepath */
p = gettok(&cp);
if (strlen(p) >= MAXPATHLEN) {
/* very long paths are not allowed */
continue;
}
(void) strlcpy(ze->zone_path, p, MAXPATHLEN);
- /* uuid */
p = gettok(&cp);
if (uuid_parse(p, ze->zone_uuid) == -1)
uuid_clear(ze->zone_uuid);
- /* brand [optional] */
- p = gettok(&cp);
- if (strlen(p) >= MAXNAMELEN) {
- /* very long names are not allowed */
- continue;
- }
- (void) strlcpy(ze->zone_brand, p, MAXNAMELEN);
-
- /* IP type [optional] */
- p = gettok(&cp);
- if (strlen(p) >= MAXNAMELEN) {
- /* very long names are not allowed */
- continue;
- }
- ze->zone_iptype = ZS_SHARED;
- if (*p == 'e') {
- ze->zone_iptype = ZS_EXCLUSIVE;
- }
-
- /* debug ID [optional] */
- p = gettok(&cp);
- if (*p != '\0')
- ze->zone_did = atoi(p);
-
break;
}
return (ze);
}
--- 151,171 ----
*** 321,338 ****
{
FILE *index_file, *tmp_file;
char buf[MAX_INDEX_LEN];
int tmp_file_desc, lock_fd, err;
boolean_t exist, need_quotes;
! char *cp, *tmpp;
char tmp_path[MAXPATHLEN];
char path[MAXPATHLEN];
char uuidstr[UUID_PRINTABLE_STRING_LENGTH];
size_t namelen;
! const char *zone_name, *zone_state, *zone_path, *zone_uuid,
! *zone_brand = "", *zone_iptype;
! zoneid_t zone_did;
assert(ze != NULL);
/*
* Don't allow modification of Global Zone entry
--- 292,307 ----
{
FILE *index_file, *tmp_file;
char buf[MAX_INDEX_LEN];
int tmp_file_desc, lock_fd, err;
boolean_t exist, need_quotes;
! char *cp;
char tmp_path[MAXPATHLEN];
char path[MAXPATHLEN];
char uuidstr[UUID_PRINTABLE_STRING_LENGTH];
size_t namelen;
! const char *zone_name, *zone_state, *zone_path, *zone_uuid;
assert(ze != NULL);
/*
* Don't allow modification of Global Zone entry
*** 381,393 ****
}
exist = B_FALSE;
zone_name = ze->zone_name;
namelen = strlen(zone_name);
- zone_brand = ze->zone_brand;
- zone_iptype = (ze->zone_iptype == ZS_SHARED ? "sh" : "ex");
- zone_did = ze->zone_did;
for (;;) {
if (fgets(buf, sizeof (buf), index_file) == NULL) {
if (operation == PZE_ADD && !exist) {
zone_state = zone_state_str(ze->zone_state);
zone_path = ze->zone_path;
--- 350,359 ----
*** 438,452 ****
err = Z_UPDATING_INDEX;
goto error;
}
zone_path = gettok(&cp);
zone_uuid = gettok(&cp);
- zone_brand = gettok(&cp);
- zone_iptype = gettok(&cp);
- tmpp = gettok(&cp);
- if (*tmpp != '\0')
- zone_did = atoi(tmpp);
switch (operation) {
case PZE_ADD:
/* can't add same zone */
err = Z_UPDATING_INDEX;
--- 404,413 ----
*** 457,495 ****
* If the caller specified a new state for the zone,
* then use that. Otherwise, use the current state.
*/
if (ze->zone_state >= 0) {
zone_state = zone_state_str(ze->zone_state);
}
/* If a new name is supplied, use it. */
if (ze->zone_newname[0] != '\0')
zone_name = ze->zone_newname;
if (ze->zone_path[0] != '\0')
zone_path = ze->zone_path;
-
- /* If new UUID provided, replace it */
- if (!uuid_is_null(ze->zone_uuid)) {
- uuid_unparse(ze->zone_uuid, uuidstr);
- zone_uuid = uuidstr;
- }
-
- /* If a brand is supplied, use it. */
- if (ze->zone_brand[0] != '\0') {
- zone_brand = ze->zone_brand;
-
- /*
- * Since the brand, iptype and did are optional,
- * we we only reset the iptype and did if the
- * brand is provided.
- */
- zone_iptype = (ze->zone_iptype == ZS_SHARED ?
- "sh" : "ex");
- zone_did = ze->zone_did;
- }
-
break;
case PZE_REMOVE:
default:
continue;
--- 418,443 ----
* If the caller specified a new state for the zone,
* then use that. Otherwise, use the current state.
*/
if (ze->zone_state >= 0) {
zone_state = zone_state_str(ze->zone_state);
+
+ /*
+ * If the caller is uninstalling this zone,
+ * then wipe out the uuid. The zone's contents
+ * are no longer known.
+ */
+ if (ze->zone_state < ZONE_STATE_INSTALLED)
+ zone_uuid = "";
}
/* If a new name is supplied, use it. */
if (ze->zone_newname[0] != '\0')
zone_name = ze->zone_newname;
if (ze->zone_path[0] != '\0')
zone_path = ze->zone_path;
break;
case PZE_REMOVE:
default:
continue;
*** 517,537 ****
* names, and do not occur in zone states, and in theory should
* never occur in a zonepath since zonecfg does not support a
* method for escaping them.
*/
need_quotes = (strchr(zone_path, ':') != NULL);
-
- if (*zone_brand != '\0') {
- (void) fprintf(tmp_file, "%s:%s:%s%s%s:%s:%s:%s:%d\n",
- zone_name, zone_state, need_quotes ? "\"" : "",
- zone_path, need_quotes ? "\"" : "", zone_uuid,
- zone_brand, zone_iptype, zone_did);
- } else {
(void) fprintf(tmp_file, "%s:%s:%s%s%s:%s\n", zone_name,
zone_state, need_quotes ? "\"" : "", zone_path,
need_quotes ? "\"" : "", zone_uuid);
- }
exist = B_TRUE;
}
(void) fclose(index_file);
index_file = NULL;
--- 465,477 ----