2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License, Version 1.0 only
2N/A * (the "License"). You may not use this file except in compliance
2N/A * with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/*
2N/A * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
2N/A * Use is subject to license terms.
2N/A */
2N/A
2N/A#pragma ident "%Z%%M% %I% %E% SMI"
2N/A
2N/A#include <nsswitch.h>
2N/A
2N/A#include "passwdutil.h"
2N/A
2N/A/*
2N/A * __check_history - check if a user's new password is in the user's
2N/A * old password history.
2N/A *
2N/A * Entry
2N/A * user = username.
2N/A * passwd = new clear text password.
2N/A * rep = repositories to check.
2N/A *
2N/A * Exit
2N/A * PWU_SUCCESS, passwd found in user's old password history.
2N/A * The caller should only be interested and fail if
2N/A * PWU_SUCCESS is returned.
2N/A * PWU_NOT_FOUND, passwd not in user's old password history.
2N/A * PWU_errors, PWU_ errors from other routines.
2N/A *
2N/A */
2N/Aint
2N/A__check_history(char *user, char *passwd, pwu_repository_t *rep)
2N/A{
2N/A int repositories;
2N/A int i;
2N/A int res;
2N/A
2N/A repositories = get_ns(rep, PWU_READ);
2N/A
2N/A if (repositories == 0)
2N/A return (PWU_SYSTEM_ERROR);
2N/A
2N/A if (repositories == REP_ERANGE)
2N/A return (PWU_REPOSITORY_ERROR);
2N/A
2N/A i = REP_FILES;
2N/A res = PWU_NOT_FOUND;
2N/A
2N/A /* Loop over repositories until the user is found */
2N/A while ((i <= REP_LAST) && (res == PWU_NOT_FOUND)) {
2N/A if (repositories & i)
2N/A if (rops[i]->checkhistory != NULL)
2N/A res = rops[i]->checkhistory(user, passwd, rep);
2N/A i <<= 1;
2N/A }
2N/A return (res);
2N/A}