c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs/*
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * This file and its contents are supplied under the terms of the
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * Common Development and Distribution License ("CDDL"), version 1.0.
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * You may only use this file in accordance with the terms of version
aa81749390e332985277568edab1ee6132326b42gs * 1.0 of the CDDL.
aa81749390e332985277568edab1ee6132326b42gs *
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * A full copy of the text of the CDDL should have accompanied this
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * source. A copy of the CDDL is also available via the Internet at
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * http://www.illumos.org/license/CDDL.
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs */
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs/*
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * Copyright 2016 Joyent, Inc.
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs */
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs/*
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * Regression test for 7076 where doing a putenv() call without an '=' sign
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * may lead to a segmentation fault when doing a getenv() depending on the
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * circumstances of the environment's layout. Verify putenv() mimics
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs * unsetenv().
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs */
bdb9230ac765cb7af3fc1f4119caf2c5720dceb3Garrett D'Amore
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs#include <stdlib.h>
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs#include <stdio.h>
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs#include <errno.h>
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs#include <string.h>
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs#include <sys/debug.h>
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gsint
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gsmain(void)
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs{
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs if (putenv("FOO=bar") != 0) {
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs fprintf(stderr, "failed to put FOO into the environment: %s\n",
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs strerror(errno));
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (1);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs }
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs if (getenv("FOO") == NULL) {
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs fprintf(stderr, "failed to retrieve FOO from the "
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs "environment!\n");
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (1);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs }
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs VERIFY0(unsetenv("FOO"));
526431940871c58531fcb8622ff47caaac00f6aegs
526431940871c58531fcb8622ff47caaac00f6aegs if (getenv("FOO") != NULL) {
526431940871c58531fcb8622ff47caaac00f6aegs fprintf(stderr, "Somehow retrieved FOO from the "
526431940871c58531fcb8622ff47caaac00f6aegs "environment after unsetenv()!\n");
526431940871c58531fcb8622ff47caaac00f6aegs return (1);
526431940871c58531fcb8622ff47caaac00f6aegs }
dfc2d53e07384b9eaca5466a2328c88a1ed96f32mx
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs if (putenv("FOO=bar") != 0) {
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs fprintf(stderr, "failed to put FOO into the environment: %s\n",
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs strerror(errno));
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (1);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs }
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs if (getenv("FOO") == NULL) {
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs fprintf(stderr, "failed to retrieve FOO from the "
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs "environment!\n");
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (1);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs }
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs VERIFY0(putenv("FOO"));
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs if (getenv("FOO") != NULL) {
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs fprintf(stderr, "Somehow retrieved FOO from the "
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs "environment after putenv()!\n");
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (1);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs }
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs return (0);
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs}
c7fd2ed091e4e4beb47e1da3a6197a2c38f29c02gs