From bf07fd8e272310453f7b6642c26acbcc4c3ae5ea Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sun, 6 Jul 1997 21:36:45 +0000 Subject: [PATCH] something git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1983 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/kuserok.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/krb5/kuserok.c b/lib/krb5/kuserok.c index 9dbe601c2..c3cac235f 100644 --- a/lib/krb5/kuserok.c +++ b/lib/krb5/kuserok.c @@ -10,6 +10,31 @@ krb5_kuserok (krb5_context context, char buf[BUFSIZ]; struct passwd *pwd; FILE *f; + char *realm; + krb5_principal local_principal; + krb5_error_code ret; + krb5_boolean b; + + ret = krb5_get_default_realm (context, &realm); + if (ret) { + free (realm); + return FALSE; + } + + ret = krb5_build_principal (context, + &local_principal, + strlen(realm), + realm, + luser, + NULL); + free (realm); + if (ret) + return FALSE; + + b = krb5_principal_compare (context, principal, local_principal); + krb5_free_principal (context, local_principal); + if (b) + return TRUE; pwd = getpwnam (luser); /* XXX - Should use k_getpwnam? */ if (pwd == NULL) @@ -18,6 +43,24 @@ krb5_kuserok (krb5_context context, f = fopen (buf, "r"); if (f == NULL) return FALSE; - + while (fgets (buf, sizeof(buf), f) != NULL) { + krb5_principal tmp; + if(buf[strlen(buf) - 1] == '\n') + buf[strlen(buf) - 1] = '\0'; + + ret = krb5_parse_name (context, buf, &tmp); + if (ret) { + fclose (f); + return FALSE; + } + b = krb5_principal_compare (context, principal, tmp); + krb5_free_principal (context, tmp); + if (b) { + fclose (f); + return TRUE; + } + } + fclose (f); + return FALSE; }