pam_chauthtok.c revision 115619
191094Sdes/*-
2115619Sdes * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
391094Sdes * All rights reserved.
491094Sdes *
591094Sdes * This software was developed for the FreeBSD Project by ThinkSec AS and
699158Sdes * Network Associates Laboratories, the Security Research Division of
799158Sdes * Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
899158Sdes * ("CBOSS"), as part of the DARPA CHATS research program.
991094Sdes *
1091094Sdes * Redistribution and use in source and binary forms, with or without
1191094Sdes * modification, are permitted provided that the following conditions
1291094Sdes * are met:
1391094Sdes * 1. Redistributions of source code must retain the above copyright
1491094Sdes *    notice, this list of conditions and the following disclaimer.
1591094Sdes * 2. Redistributions in binary form must reproduce the above copyright
1691094Sdes *    notice, this list of conditions and the following disclaimer in the
1791094Sdes *    documentation and/or other materials provided with the distribution.
1891094Sdes * 3. The name of the author may not be used to endorse or promote
1991094Sdes *    products derived from this software without specific prior written
2091094Sdes *    permission.
2191094Sdes *
2291094Sdes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2391094Sdes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2491094Sdes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2591094Sdes * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2691094Sdes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2791094Sdes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2891094Sdes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2991094Sdes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3091094Sdes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3191094Sdes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3291094Sdes * SUCH DAMAGE.
3391094Sdes *
34115619Sdes * $P4: //depot/projects/openpam/lib/pam_chauthtok.c#16 $
3591094Sdes */
3691094Sdes
3791094Sdes#include <sys/param.h>
3891094Sdes
3991094Sdes#include <security/pam_appl.h>
4091094Sdes
4191094Sdes#include "openpam_impl.h"
4291094Sdes
4391094Sdes/*
4491094Sdes * XSSO 4.2.1
4591094Sdes * XSSO 6 page 38
4691094Sdes *
4791094Sdes * Perform password related functions within the PAM framework
4891094Sdes */
4991094Sdes
5091094Sdesint
5191094Sdespam_chauthtok(pam_handle_t *pamh,
5291094Sdes	int flags)
5391094Sdes{
54110556Sdes	int r;
5591094Sdes
56107937Sdes	ENTER();
5793982Sdes	if (flags & ~(PAM_SILENT|PAM_CHANGE_EXPIRED_AUTHTOK))
58107937Sdes		RETURNC(PAM_SYMBOL_ERR);
59110556Sdes	r = openpam_dispatch(pamh, PAM_SM_CHAUTHTOK,
6091684Sdes	    flags | PAM_PRELIM_CHECK);
61110556Sdes	if (r == PAM_SUCCESS)
62110556Sdes		r = openpam_dispatch(pamh, PAM_SM_CHAUTHTOK,
6391684Sdes		    flags | PAM_UPDATE_AUTHTOK);
6491684Sdes	pam_set_item(pamh, PAM_OLDAUTHTOK, NULL);
6591684Sdes	pam_set_item(pamh, PAM_AUTHTOK, NULL);
66110556Sdes	RETURNC(r);
6791094Sdes}
6891100Sdes
6991100Sdes/*
7091100Sdes * Error codes:
7191100Sdes *
7291100Sdes *	=openpam_dispatch
7391100Sdes *	=pam_sm_chauthtok
7491100Sdes *	!PAM_IGNORE
7591684Sdes *	PAM_SYMBOL_ERR
7691100Sdes */
7793982Sdes
7893982Sdes/**
7993982Sdes * The =pam_chauthtok function attempts to change the authentication token
8093982Sdes * for the user associated with the pam context specified by the =pamh
8193982Sdes * argument.
8293982Sdes *
8393982Sdes * The =flags argument is the binary or of zero or more of the following
8493982Sdes * values:
8593982Sdes *
8694670Sdes *	=PAM_SILENT:
8793982Sdes *		Do not emit any messages.
8894670Sdes *	=PAM_CHANGE_EXPIRED_AUTHTOK:
8993982Sdes *		Change only those authentication tokens that have expired.
9094670Sdes *
9194670Sdes * If any other bits are set, =pam_chauthtok will return =PAM_SYMBOL_ERR.
9293982Sdes */
93