本文整理汇总了C++中pam_end函数的典型用法代码示例。如果您正苦于以下问题:C++ pam_end函数的具体用法?C++ pam_end怎么用?C++ pam_end使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pam_end函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: quit
static void
quit(struct weston_launch *wl, int status)
{
struct vt_mode mode = { 0 };
int err;
close(wl->signalfd);
close(wl->sock[0]);
if (wl->new_user) {
err = pam_close_session(wl->ph, 0);
if (err)
fprintf(stderr, "pam_close_session failed: %d: %s\n",
err, pam_strerror(wl->ph, err));
pam_end(wl->ph, err);
}
if (ioctl(wl->tty, KDSKBMUTE, 0) &&
ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
fprintf(stderr, "failed to restore keyboard mode: %m\n");
if (ioctl(wl->tty, KDSETMODE, KD_TEXT))
fprintf(stderr, "failed to set KD_TEXT mode on tty: %m\n");
/* We have to drop master before we switch the VT back in
* VT_AUTO, so we don't risk switching to a VT with another
* display server, that will then fail to set drm master. */
drmDropMaster(wl->drm_fd);
mode.mode = VT_AUTO;
if (ioctl(wl->tty, VT_SETMODE, &mode) < 0)
fprintf(stderr, "could not reset vt handling\n");
exit(status);
}
示例2: sftppam_exit_ev
static void sftppam_exit_ev(const void *event_data, void *user_data) {
/* Close the PAM session */
if (sftppam_pamh != NULL) {
int res;
#ifdef PAM_CRED_DELETE
res = pam_setcred(sftppam_pamh, PAM_CRED_DELETE);
#else
res = pam_setcred(sftppam_pamh, PAM_DELETE_CRED);
#endif
if (res != PAM_SUCCESS) {
pr_trace_msg(trace_channel, 9, "PAM error setting PAM_DELETE_CRED: %s",
pam_strerror(sftppam_pamh, res));
}
res = pam_close_session(sftppam_pamh, PAM_SILENT);
pam_end(sftppam_pamh, res);
sftppam_pamh = NULL;
}
if (sftppam_user != NULL) {
free(sftppam_user);
sftppam_user = NULL;
sftppam_userlen = 0;
}
}
示例3: loginpam_acct
static void loginpam_acct(struct login_context *cxt)
{
int rc;
pam_handle_t *pamh = cxt->pamh;
rc = pam_acct_mgmt(pamh, 0);
if (rc == PAM_NEW_AUTHTOK_REQD)
rc = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
if (is_pam_failure(rc))
loginpam_err(pamh, rc);
/*
* Grab the user information out of the password file for future use.
* First get the username that we are actually using, though.
*/
rc = loginpam_get_username(pamh, &cxt->username);
if (is_pam_failure(rc))
loginpam_err(pamh, rc);
if (!cxt->username || !*cxt->username) {
warnx(_("\nSession setup problem, abort."));
syslog(LOG_ERR, _("NULL user name in %s:%d. Abort."),
__FUNCTION__, __LINE__);
pam_end(pamh, PAM_SYSTEM_ERR);
sleepexit(EXIT_FAILURE);
}
}
示例4: main
int
main (int argc, char **argv)
{
pam_handle_t *pamh;
int rc;
for (loop = 0; loop < sizeof (tv) / sizeof (tv[0]); loop++)
{
rc = pam_start ("pam_oath1", tv[loop].user, &conv, &pamh);
if (rc != PAM_SUCCESS)
{
printf ("pam_start failed loop %ld rc %d: %s\n", loop, rc,
pam_strerror (pamh, rc));
return 1;
}
rc = pam_authenticate (pamh, 0);
if (rc != tv[loop].expectrc)
{
printf ("pam_authenticate failed loop %ld rc %d: %s\n", loop, rc,
pam_strerror (pamh, rc));
return 1;
}
rc = pam_end (pamh, rc);
if (rc != PAM_SUCCESS)
{
printf ("pam_end failed loop %ld rc %d: %s\n", loop, rc,
pam_strerror (pamh, rc));
return 1;
}
}
return 0;
}
示例5: close_pam_handle
static gboolean
close_pam_handle (int status)
{
if (pam_handle != NULL) {
int status2;
status2 = pam_end (pam_handle, status);
pam_handle = NULL;
if (gs_auth_get_verbose ()) {
g_message (" pam_end (...) ==> %d (%s)",
status2,
(status2 == PAM_SUCCESS ? "Success" : "Failure"));
}
}
if (message_handled_condition != NULL) {
g_cond_free (message_handled_condition);
message_handled_condition = NULL;
}
if (message_handler_mutex != NULL) {
g_mutex_free (message_handler_mutex);
message_handler_mutex = NULL;
}
return TRUE;
}
示例6: checkpw_cleanup
static void checkpw_cleanup (pam_handle_t *hdl)
{
#if 0 /* see checkpw() for why this is #if 0 */
pam_close_session (hdl,NIL); /* close session [uw]tmp */
#endif
pam_setcred (hdl,PAM_DELETE_CRED);
pam_end (hdl,PAM_SUCCESS);
}
示例7: pam_close_session
PAMAuthenticator::~PAMAuthenticator(void)
{
if (this->m_ph) {
int res = pam_close_session(this->m_ph, 0);
pam_end(this->m_ph, res);
this->m_ph = 0;
}
}
示例8: AuthPAMClose
void AuthPAMClose()
{
if (pamh)
{
pam_close_session(pamh, 0);
pam_end(pamh,PAM_SUCCESS);
}
}
示例9: pam_end
void context::close() noexcept
{
if(_M_pamh)
{
pam_end(_M_pamh, _M_code);
_M_pamh = nullptr;
}
}
示例10: do_pam_authenticate
static auth_result_t do_pam_authenticate(const char* service, const char *username,
const char *password,
error_handler_t *error_handler)
{
#ifdef JUTI_NO_PAM
error_handler->error(MSG_AUTHUSER_PAM_NOT_AVAILABLE);
return JUTI_AUTH_ERROR;
#else
auth_result_t ret;
int status;
pam_handle_t *pamh; /* pam handle */
struct pam_conv pamconv; /* pam init structure */
struct app_pam_data app_data; /* pam application data */
pamh = NULL;
/*
* app_data gets passed through the framework
* to "login_conv". Set the password for use in login_conv
* and set up the pam_conv data with the conversation
* function and the application data pointer.
*/
app_data.password = password;
pamconv.conv = login_conv;
pamconv.appdata_ptr = &app_data;
/* pam start session */
status = pam_start(service, username, &pamconv, &pamh);
if(status != PAM_SUCCESS) {
ret = JUTI_AUTH_ERROR;
goto error;
}
status = pam_authenticate(pamh, PAM_SILENT);
if(status != PAM_SUCCESS) {
ret = JUTI_AUTH_FAILED;
goto error;
}
/* check if the authenicated user is allowed to use machine */
status = pam_acct_mgmt(pamh, PAM_SILENT);
if (status != PAM_SUCCESS) {
ret = JUTI_AUTH_FAILED;
goto error;
}
ret = JUTI_AUTH_SUCCESS;
error:
if (status != PAM_SUCCESS) {
const char *pam_err_msg = pam_strerror(pamh, status);
error_handler->error(MSG_AUTHUSER_PAM_ERROR_S, pam_err_msg);
}
/* end pam session */
if (pamh != NULL) {
pam_end(pamh, status == PAM_SUCCESS ? PAM_SUCCESS : PAM_ABORT);
}
return ret;
#endif
}
示例11: authenticate_user
int authenticate_user(const char *user, const char *pass)
{
pam_handle_t *pamh;
tAppdata appdata = {user, pass};
struct pam_conv pam_conv = {&pam_exchange, &appdata};
if ((pam_start (PAM_SERVICE_NAME, NULL, &pam_conv, &pamh) != PAM_SUCCESS) ||
(pam_authenticate (pamh,PAM_SILENT) != PAM_SUCCESS) ||
(pam_acct_mgmt (pamh,0) != PAM_SUCCESS) ||
(pam_setcred (pamh,PAM_ESTABLISH_CRED) != PAM_SUCCESS))
{
pam_end (pamh,PAM_AUTH_ERR);
return 0;
}
pam_end (pamh,PAM_SUCCESS);
return 1;
}
示例12: main
int
main(void)
{
pam_handle_t *pamh;
struct pam_args *args;
struct pam_conv conv = { NULL, NULL };
char *expected;
struct output *seen;
#ifdef HAVE_KRB5
krb5_error_code code;
krb5_principal princ;
#endif
plan(27);
if (pam_start("test", NULL, &conv, &pamh) != PAM_SUCCESS)
sysbail("Fake PAM initialization failed");
args = putil_args_new(pamh, 0);
if (args == NULL)
bail("cannot create PAM argument struct");
TEST(putil_crit, LOG_CRIT, "putil_crit");
TEST(putil_err, LOG_ERR, "putil_err");
putil_debug(args, "%s", "foo");
ok(pam_output() == NULL, "putil_debug without debug on");
args->debug = true;
TEST(putil_debug, LOG_DEBUG, "putil_debug");
args->debug = false;
TEST_PAM(putil_crit_pam, PAM_SYSTEM_ERR, LOG_CRIT, "putil_crit_pam S");
TEST_PAM(putil_crit_pam, PAM_BUF_ERR, LOG_CRIT, "putil_crit_pam B");
TEST_PAM(putil_crit_pam, PAM_SUCCESS, LOG_CRIT, "putil_crit_pam ok");
TEST_PAM(putil_err_pam, PAM_SYSTEM_ERR, LOG_ERR, "putil_err_pam");
putil_debug_pam(args, PAM_SYSTEM_ERR, "%s", "bar");
ok(pam_output() == NULL, "putil_debug_pam without debug on");
args->debug = true;
TEST_PAM(putil_debug_pam, PAM_SYSTEM_ERR, LOG_DEBUG, "putil_debug_pam");
TEST_PAM(putil_debug_pam, PAM_SUCCESS, LOG_DEBUG, "putil_debug_pam ok");
args->debug = false;
#ifdef HAVE_KRB5
TEST_KRB5(putil_crit_krb5, LOG_CRIT, "putil_crit_krb5");
TEST_KRB5(putil_err_krb5, LOG_ERR, "putil_err_krb5");
code = krb5_parse_name(args->ctx, "[email protected]@EXAMPLE.COM", &princ);
putil_debug_krb5(args, code, "%s", "krb");
ok(pam_output() == NULL, "putil_debug_krb5 without debug on");
args->debug = true;
TEST_KRB5(putil_debug_krb5, LOG_DEBUG, "putil_debug_krb5");
args->debug = false;
#else
skip_block(4, "not built with Kerberos support");
#endif
putil_args_free(args);
pam_end(pamh, 0);
return 0;
}
示例13: create_pamh
/* Creates a pam handle for the auto login */
static gboolean
create_pamh (MdmDisplay *d,
const char *service,
const char *login,
struct pam_conv *conv,
const char *display,
int *pamerr)
{
if (display == NULL) {
mdm_error ("Cannot setup pam handle with null display");
return FALSE;
}
if (pamh != NULL) {
mdm_error ("create_pamh: Stale pamh around, cleaning up");
pam_end (pamh, PAM_SUCCESS);
}
/* init things */
pamh = NULL;
opened_session = FALSE;
did_setcred = FALSE;
/* Initialize a PAM session for the user */
if ((*pamerr = pam_start (service, login, conv, &pamh)) != PAM_SUCCESS) {
pamh = NULL; /* be anal */
if (mdm_slave_action_pending ())
mdm_error ("Unable to establish service %s: %s\n", service, pam_strerror (NULL, *pamerr));
return FALSE;
}
/* Inform PAM of the user's tty */
if ((*pamerr = pam_set_item (pamh, PAM_TTY, display)) != PAM_SUCCESS) {
if (mdm_slave_action_pending ())
mdm_error ("Can't set PAM_TTY=%s", display);
return FALSE;
}
if ( ! d->attached) {
/* Only set RHOST if host is remote */
/* From the host of the display */
if ((*pamerr = pam_set_item (pamh, PAM_RHOST,
d->hostname)) != PAM_SUCCESS) {
if (mdm_slave_action_pending ())
mdm_error ("Can't set PAM_RHOST=%s", d->hostname);
return FALSE;
}
}
// Preselect the previous user
if (do_we_need_to_preset_the_username) {
do_we_need_to_preset_the_username = FALSE;
mdm_preselect_user(pamerr);
}
return TRUE;
}
示例14: mdm_verify_cleanup
void
mdm_verify_cleanup (MdmDisplay *d)
{
gid_t groups[1] = { 0 };
cur_mdm_disp = d;
if (pamh != NULL) {
gint pamerr;
pam_handle_t *tmp_pamh;
gboolean old_opened_session;
gboolean old_did_setcred;
mdm_debug ("Running mdm_verify_cleanup and pamh != NULL");
mdm_sigterm_block_push ();
mdm_sigchld_block_push ();
tmp_pamh = pamh;
pamh = NULL;
old_opened_session = opened_session;
opened_session = FALSE;
old_did_setcred = did_setcred;
did_setcred = FALSE;
mdm_sigchld_block_pop ();
mdm_sigterm_block_pop ();
pamerr = PAM_SUCCESS;
/* Close the users session */
if (old_opened_session) {
mdm_debug ("Running pam_close_session");
pamerr = pam_close_session (tmp_pamh, 0);
}
/* Throw away the credentials */
if (old_did_setcred) {
mdm_debug ("Running pam_setcred with PAM_DELETE_CRED");
pamerr = pam_setcred (tmp_pamh, PAM_DELETE_CRED);
}
pam_end (tmp_pamh, pamerr);
/* Workaround to avoid mdm messages being logged as PAM_pwdb */
mdm_log_shutdown ();
mdm_log_init ();
}
/* Clear the group setup */
setgid (0);
/* this will get rid of any suplementary groups etc... */
setgroups (1, groups);
cur_mdm_disp = NULL;
/* reset limits */
mdm_reset_limits ();
}
示例15: pam_stopSession
void XProcess::pam_shutdown(){
if(pam_session_open){
pam_stopSession();
pam_session_open = FALSE;
}
if(pam_started){
pam_end(pamh,0);
pam_started = FALSE;
}
}