components/openssl/openssl-default/wanboot-openssl/wanboot-stubs.c
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Fri, 28 Aug 2015 11:04:52 -0700
changeset 4822 1fb8a14c6702
parent 1158 components/openssl/openssl-1.0.1/wanboot-openssl/wanboot-stubs.c@227137d9fbce
permissions -rw-r--r--
PSARC/2015/353 OpenSSL 1.0.2 20829622 Upgrade to OpenSSL 1.0.2d

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
 */

/* Content of this file is only needed for wanboot. */
#ifdef	_BOOT

#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <stddef.h>

/*
 * In OpenSSL 0.9.7 the EVP_read_pw_string now calls into the new "ui"
 * routines of 0.9.7, which is not compiled in the standalone, so it is
 * stubbed out here to avoid having to add a bunch of #ifndef's elsewhere.
 */
/* ARGSUSED */
int
EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt, int
    verify)
{
	return (-1); /* failure */
}

/*
 * In standalone issetugid() is always false.
 */
int
OPENSSL_issetugid(void)
{
	return (1);
}

/*
 * Directory routines -- currently, the only consumer of these interfaces
 * is $SRC/common/openssl/ssl/ssl_cert.c, and it has fallback code in the
 * case of failure, so we just fail opendir() and stub out the rest.  At
 * some point, we may need to provide a real implementation.
 */
/* ARGSUSED */
DIR *
opendir(const char *dirname)
{
	errno = EACCES;
	return (NULL);
}

/* ARGSUSED */
struct dirent *
readdir(DIR *dirp)
{
	return (NULL);
}

/* ARGSUSED */
int
closedir(DIR *dirp)
{
	return (0);
}

/*
 * Atoi is used on multiple places in libcrypto.
 * This implementation is taken from stand-alone libsock library:
 * usr/src/stand/lib/sock/sock_test.c
 * Alternative solution: just extern it here, wanboot has -lsock anyway.
 */
#ifndef	isdigit
#define	isdigit(c) ((c) >= '0' && (c) <= '9')
#endif

#ifndef	isspace
#define	isspace(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || \
		    (c) == '\r' || (c) == '\f' || (c) == '\013')
#endif
int
atoi(const char *p)
{
	int n;
	int c = *p++, neg = 0;

	while (isspace(c)) {
		c = *p++;
	}
	if (!isdigit(c)) {
		switch (c) {
		case '-':
			neg++;
			/* FALLTHROUGH */
		case '+':
			c = *p++;
		}
	}
	for (n = 0; isdigit(c); c = *p++) {
		n *= 10; /* two steps to avoid unnecessary overflow */
		n += '0' - c; /* accum neg to avoid surprises at MAX */
	}
	return (neg ? n : -n);
}

#endif	/* _BOOT */