util.c revision 99ebb4ca412cb0a19d77a3899a87c055b9c30fa8
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#pragma ident "%Z%%M% %I% %E% SMI"
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <cryptoutil.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <strings.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <stdio.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <tzfile.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * This function returns a fullpath based on the "dir" and "filepath" input
843e19887f64dde75055cf8842fc4db2171eff45johnlev * arugments.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * - If the filepath specified does not start with a "/" and the directory
843e19887f64dde75055cf8842fc4db2171eff45johnlev * is also given, prepend the directory to the filename.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * - If only dir or filepath is given, this function returns a copy of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * given argument.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * - If the filepath is fully qualified already and the "dir" is also
843e19887f64dde75055cf8842fc4db2171eff45johnlev * given, return NULL to indicate an error.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlevchar *
843e19887f64dde75055cf8842fc4db2171eff45johnlevget_fullpath(char *dir, char *filepath)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{
843e19887f64dde75055cf8842fc4db2171eff45johnlev char *fullpath = NULL;
843e19887f64dde75055cf8842fc4db2171eff45johnlev int pathlen = 0;
843e19887f64dde75055cf8842fc4db2171eff45johnlev int dirlen = 0;
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (filepath != NULL)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pathlen = strlen(filepath);
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (dir != NULL)
843e19887f64dde75055cf8842fc4db2171eff45johnlev dirlen = strlen(dir);
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (pathlen > 0 && dirlen > 0) {
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (filepath[0] != '/') {
843e19887f64dde75055cf8842fc4db2171eff45johnlev int len = pathlen + dirlen + 2;
843e19887f64dde75055cf8842fc4db2171eff45johnlev fullpath = (char *)malloc(len);
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (fullpath != NULL)
843e19887f64dde75055cf8842fc4db2171eff45johnlev (void) snprintf(fullpath, len, "%s/%s",
843e19887f64dde75055cf8842fc4db2171eff45johnlev dir, filepath);
843e19887f64dde75055cf8842fc4db2171eff45johnlev } else {
843e19887f64dde75055cf8842fc4db2171eff45johnlev return (NULL);
843e19887f64dde75055cf8842fc4db2171eff45johnlev }
843e19887f64dde75055cf8842fc4db2171eff45johnlev } else if (pathlen > 0) {
843e19887f64dde75055cf8842fc4db2171eff45johnlev fullpath = (char *)strdup(filepath);
} else if (dirlen > 0) {
fullpath = (char *)strdup(dir);
}
return (fullpath);
}
/*
* This function converts the input string to the value of time
* in seconds.
* - If the input string is NULL, return zero second.
* - The input string needs to be in the form of:
* number-second(s), number-minute(s), number-hour(s) or
* number-day(s).
*/
int
str2lifetime(char *ltimestr, uint32_t *ltime)
{
int num;
char timetok[10];
if (ltimestr == NULL || !strlen(ltimestr)) {
*ltime = 0;
return (0);
}
(void) memset(timetok, 0, sizeof (timetok));
if (sscanf(ltimestr, "%d-%08s", &num, timetok) != 2)
return (-1);
if (!strcasecmp(timetok, "second") ||
!strcasecmp(timetok, "seconds")) {
*ltime = num;
} else if (!strcasecmp(timetok, "minute") ||
!strcasecmp(timetok, "minutes")) {
*ltime = num * SECSPERMIN;
} else if (!strcasecmp(timetok, "day") ||
!strcasecmp(timetok, "days")) {
*ltime = num * SECSPERDAY;
} else if (!strcasecmp(timetok, "hour") ||
!strcasecmp(timetok, "hours")) {
*ltime = num * SECSPERHOUR;
} else {
*ltime = 0;
return (-1);
}
return (0);
}