diff options
Diffstat (limited to 'lib/libpam/modules/pam_ksu/pam_ksu.c')
| -rw-r--r-- | lib/libpam/modules/pam_ksu/pam_ksu.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/libpam/modules/pam_ksu/pam_ksu.c b/lib/libpam/modules/pam_ksu/pam_ksu.c index 47362c835c12..04c276a423d3 100644 --- a/lib/libpam/modules/pam_ksu/pam_ksu.c +++ b/lib/libpam/modules/pam_ksu/pam_ksu.c @@ -48,6 +48,45 @@ static long get_su_principal(krb5_context, const char *, const char *, static int auth_krb5(pam_handle_t *, krb5_context, const char *, krb5_principal); +#ifdef MK_MITKRB5 +/* For MIT KRB5 only. */ + +/* + * XXX This entire module will need to be rewritten when heimdal + * XXX compatidibility is no longer needed. + */ +#define KRB5_DEFAULT_CCFILE_ROOT "/tmp/krb5cc_" +#define KRB5_DEFAULT_CCROOT "FILE:" KRB5_DEFAULT_CCFILE_ROOT + +typedef char *heim_general_string; +typedef heim_general_string Realm; +typedef Realm krb5_realm; +typedef const char *krb5_const_realm; + +static krb5_error_code +krb5_make_principal(krb5_context context, krb5_principal *principal, + krb5_const_realm realm, ...) +{ + krb5_realm temp_realm = NULL; + krb5_error_code rc; + va_list ap; + + if (realm == NULL) { + if ((rc = krb5_get_default_realm(context, &temp_realm))) + return (rc); + realm=temp_realm; + } + va_start(ap, realm); + + rc = krb5_build_principal_alloc_va(context, principal, strlen(realm), + realm, ap); + va_end(ap); + if (temp_realm) + free(temp_realm); + return (rc); +} +#endif + PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags __unused, int argc __unused, const char *argv[] __unused) |
