Lines Matching full:chain
57 * Execute a module chain
65 pam_chain_t *chain; in openpam_dispatch() local
81 /* pick a chain */ in openpam_dispatch()
85 chain = pamh->chains[PAM_AUTH]; in openpam_dispatch()
88 chain = pamh->chains[PAM_ACCOUNT]; in openpam_dispatch()
92 chain = pamh->chains[PAM_SESSION]; in openpam_dispatch()
95 chain = pamh->chains[PAM_PASSWORD]; in openpam_dispatch()
104 for (; chain != NULL; chain = chain->next) { in openpam_dispatch()
105 if (chain->module->func[primitive] == NULL) { in openpam_dispatch()
107 chain->module->path, pam_sm_func_name[primitive]); in openpam_dispatch()
111 pamh->current = chain; in openpam_dispatch()
116 pam_sm_func_name[primitive], chain->module->path); in openpam_dispatch()
117 r = (chain->module->func[primitive])(pamh, flags, in openpam_dispatch()
118 chain->optc, (const char **)(intptr_t)chain->optv); in openpam_dispatch()
121 chain->module->path, pam_sm_func_name[primitive], in openpam_dispatch()
136 if ((chain->flag == PAM_SUFFICIENT || in openpam_dispatch()
137 chain->flag == PAM_BINDING) && !fail && in openpam_dispatch()
154 if ((chain->flag == PAM_REQUIRED || in openpam_dispatch()
155 chain->flag == PAM_BINDING) && !fail) { in openpam_dispatch()
162 * If a requisite module fails, terminate the chain in openpam_dispatch()
165 if (chain->flag == PAM_REQUISITE) { in openpam_dispatch()
176 * Require the chain to be non-empty, and at least one module in openpam_dispatch()
177 * in the chain to be successful, so that we don't fail open. in openpam_dispatch()