int openpam_configure(pam_handle_t *pamh, const char *service) { pam_facility_t fclt; int serrno; ENTERS(service); if (!valid_service_name(service)) { openpam_log(PAM_LOG_ERROR, "invalid service name"); RETURNC(PAM_SYSTEM_ERR); } if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) < 0) { if (errno != ENOENT) goto load_err; } for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) { if (pamh->chains[fclt] != NULL) continue; if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0) goto load_err; } RETURNC(PAM_SUCCESS); load_err: serrno = errno; openpam_clear_chains(pamh->chains); errno = serrno; RETURNC(PAM_SYSTEM_ERR); }
int openpam_configure(pam_handle_t *pamh, const char *service) { pam_facility_t fclt; const char *p; for (p = service; *p; ++p) if (!is_pfcs(*p)) return (PAM_SYSTEM_ERR); if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) != PAM_SUCCESS) goto load_err; for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) { if (pamh->chains[fclt] != NULL) continue; if (openpam_load_chain(pamh, PAM_OTHER, fclt) != PAM_SUCCESS) goto load_err; } return (PAM_SUCCESS); load_err: openpam_clear_chains(pamh->chains); return (PAM_SYSTEM_ERR); }
int openpam_configure(pam_handle_t *pamh, const char *service) { pam_facility_t fclt; int serrno; ENTERS(service); if (!valid_service_name(service)) { openpam_log(PAM_LOG_ERROR, "invalid service name"); RETURNC(PAM_SYSTEM_ERR); } if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) < 0) goto load_err; for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) { if (pamh->chains[fclt] != NULL) continue; if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0) goto load_err; } #ifdef __NetBSD__ /* * On NetBSD we require the AUTH chain to have a binding * or a required module. */ { pam_chain_t *this = pamh->chains[PAM_AUTH]; for (; this != NULL; this = this->next) if (this->flag == PAM_BINDING || this->flag == PAM_REQUIRED) break; if (this == NULL) { openpam_log(PAM_LOG_ERROR, "No required or binding component " "in service %s, facility %s", service, pam_facility_name[PAM_AUTH]); goto load_err; } } #endif RETURNC(PAM_SUCCESS); load_err: serrno = errno; openpam_clear_chains(pamh->chains); errno = serrno; RETURNC(PAM_SYSTEM_ERR); }