5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER START
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * The contents of this file are subject to the terms of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Common Development and Distribution License (the "License").
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You may not use this file except in compliance with the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * or http://www.opensolaris.org/os/licensing.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * See the License for the specific language governing permissions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * and limitations under the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * When distributing Covered Code, include this CDDL HEADER in each
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * If applicable, add the following below this CDDL HEADER, with the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * fields enclosed by brackets "[]" replaced with your own identifying
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * information: Portions Copyright [yyyy] [name of copyright owner]
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER END
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
6e1ae2a33c618c4c2b14aec7d2f21743ddea5837Gary Pennington * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* All Rights Reserved */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <stdio.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <limits.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <stdlib.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <unistd.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <string.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <fcntl.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <sys/types.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <sys/stat.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <signal.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <errno.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <assert.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <pkgdev.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <pkginfo.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <pkglocs.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <locale.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <libintl.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <instzones_api.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <pkglib.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <install.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <libinst.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <libadm.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <messages.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic char *localeNames[] = {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_CTYPE",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_NUMERIC",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_TIME",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_COLLATE",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_MESSAGES",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_MONETARY",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LC_ALL",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "LANG",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "TZ",
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland NULL
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland};
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define NUM_LOCALE_TYPES 100
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic char *envPtr[NUM_LOCALE_TYPES];
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * extern declarations
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern char **environ;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * this is the initial and incremental allocation used to
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * populate the environment "environ"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define MALSIZ 64
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandvoid
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandputparam(char *param, char *value)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland{
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland char *pt;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int ptlen;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int i, n;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * If the environment is NULL, allocate space for the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * character pointers.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (environ == NULL) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland environ = (char **)calloc(MALSIZ, sizeof (char *));
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (environ == NULL) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland progerr(gettext(ERR_MEMORY), errno);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland quit(99);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * If this parameter is already in place and it has a different
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * value, clear the old value by freeing the memory previously
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * allocated. Otherwise, we leave well-enough alone.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland n = strlen(param);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (i = 0; environ[i]; i++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (strncmp(environ[i], param, n) == 0 &&
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (environ[i][n] == '=')) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (strcmp((environ[i]) + n + 1, value) == 0)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland return;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland else {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland free(environ[i]);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland break;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* Allocate space for the new environment entry. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland ptlen = (strlen(param)+strlen(value)+2)*(sizeof (char));
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland pt = (char *)calloc(strlen(param)+strlen(value)+2, sizeof (char));
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (pt == NULL) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland progerr(gettext(ERR_MEMORY), errno);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland quit(99);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Put the statement into the allocated space and point the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * environment entry at it.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(pt, ptlen, "%s=%s", param, value);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (environ[i]) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland environ[i] = pt;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland return;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * With this parameter in place, if we're at the end of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * allocated environment then allocate more space.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland environ[i++] = pt;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if ((i % MALSIZ) == 0) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland environ = (char **)realloc((void *)environ,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (i+MALSIZ)*sizeof (char *));
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (environ == NULL) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland progerr(gettext(ERR_MEMORY), errno);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland quit(1);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* Terminate the environment properly. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland environ[i] = (char *)NULL;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* bugid 4279039 */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandvoid
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandgetuserlocale(void)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland{
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int i;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (i = 0; (localeNames[i] != NULL) && (i < NUM_LOCALE_TYPES); i++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland envPtr[i] = getenv(localeNames[i]);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (envPtr[i]) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland putparam(localeNames[i], envPtr[i]);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* bugid 4279039 */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandvoid
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandputuserlocale(void)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland{
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int i;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (i = 0; (localeNames[i] != NULL) && (i < NUM_LOCALE_TYPES); i++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (envPtr[i]) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland putparam(localeNames[i], envPtr[i]);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Name: putConditionInfo
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Description: put parent "condition" information to environment
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Arguments: a_parentZoneName - name of the parent zone
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * == NULL - no name
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * a_parentZoneType - parent zone "type"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * == NULL - no type
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Returns: void
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandvoid
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah WaterlandputConditionInfo(char *a_parentZoneName, char *a_parentZoneType)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland{
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland char *p;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland char *pa;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SML_TAG *tag = SML_TAG__NULL;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SML_TAG *ntag;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* entry debugging info */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland echoDebug(DBG_PUTPARAM_PUTCONDINFO_ENTRY);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * create tag to hold condition information:
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * <environmentConditionInformation>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * <parentZone zoneName=<?> zoneType=<?>/>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * <currentZone zoneName=<?> zoneType=<?>/>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * </environmentConditionInformation>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland tag = smlNewTag(TAG_COND_TOPLEVEL);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * information about pkgadd or pkgrm environment
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * <parentZone zoneName=<?> zoneType=<?>/>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* allocate tag for parent info */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland ntag = smlNewTag(TAG_COND_PARENT_ZONE);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* parent zone name */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland smlSetParam(ntag, TAG_COND_ZONE_NAME,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland a_parentZoneName ? a_parentZoneName : "");
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* parent zone info */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland smlSetParam(ntag, TAG_COND_ZONE_TYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland a_parentZoneType ? a_parentZoneType : "");
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* add to top level tag */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) smlAddTag(&tag, -1, ntag);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland free(ntag);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * information about pkginstall or pkgremove environment
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * <currentZone zoneName=<?> zoneType=<?>/>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* allocate tag for parent info */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland ntag = smlNewTag(TAG_COND_CURRENT_ZONE);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* current zone name */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland p = z_get_zonename();
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if ((p != NULL) && (*p != '\0')) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland smlSetParam(ntag, TAG_COND_ZONE_NAME, p);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland free(p);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* current zone type */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland smlSetParam(ntag, TAG_COND_ZONE_TYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland z_running_in_global_zone() == B_TRUE ?
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland TAG_VALUE_GLOBAL_ZONE : TAG_VALUE_NONGLOBAL_ZONE);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* add to top level tag */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) smlAddTag(&tag, -1, ntag);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland free(ntag);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * done filling in tag - convert to string and place in environment
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland p = smlConvertTagToString(tag);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* convert all new-line characters to space */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (pa = p; *pa != '\0'; pa++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (*pa == '\n') {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *pa = ' ';
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland }
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland echoDebug(DBG_PUTPARAM_PUTCONDINFO_EXIT, p);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland putparam(PKGCOND_GLOBAL_VARIABLE, p);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}