Deleted Added
full compact
aname_to_localname.c (102644) aname_to_localname.c (120945)
1/*
2 * Copyright (c) 1997 - 1999, 2002 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 19 unchanged lines hidden (view full) ---

28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#include <krb5_locl.h>
35
1/*
2 * Copyright (c) 1997 - 1999, 2002 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 19 unchanged lines hidden (view full) ---

28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#include <krb5_locl.h>
35
36RCSID("$Id: aname_to_localname.c,v 1.4 2002/04/18 08:56:40 joda Exp $");
36RCSID("$Id: aname_to_localname.c,v 1.6 2003/04/16 16:01:06 lha Exp $");
37
38krb5_error_code
39krb5_aname_to_localname (krb5_context context,
40 krb5_const_principal aname,
41 size_t lnsize,
42 char *lname)
43{
44 krb5_error_code ret;
45 krb5_realm *lrealms, *r;
37
38krb5_error_code
39krb5_aname_to_localname (krb5_context context,
40 krb5_const_principal aname,
41 size_t lnsize,
42 char *lname)
43{
44 krb5_error_code ret;
45 krb5_realm *lrealms, *r;
46 int foo = 1;
46 int valid;
47 size_t len;
48 const char *res;
49
50 ret = krb5_get_default_realms (context, &lrealms);
51 if (ret)
52 return ret;
53
47 size_t len;
48 const char *res;
49
50 ret = krb5_get_default_realms (context, &lrealms);
51 if (ret)
52 return ret;
53
54 valid = 0;
54 for (r = lrealms; *r != NULL; ++r) {
55 for (r = lrealms; *r != NULL; ++r) {
55 foo = strcmp (*r, aname->realm);
56 if (foo == 0)
56 if (strcmp (*r, aname->realm) == 0) {
57 valid = 1;
57 break;
58 break;
59 }
58 }
59 krb5_free_host_realm (context, lrealms);
60 }
61 krb5_free_host_realm (context, lrealms);
60 if (foo != 0)
62 if (valid == 0)
61 return KRB5_NO_LOCALNAME;
62
63 if (aname->name.name_string.len == 1)
64 res = aname->name.name_string.val[0];
65 else if (aname->name.name_string.len == 2
63 return KRB5_NO_LOCALNAME;
64
65 if (aname->name.name_string.len == 1)
66 res = aname->name.name_string.val[0];
67 else if (aname->name.name_string.len == 2
66 && strcmp (aname->name.name_string.val[1], "root") == 0)
68 && strcmp (aname->name.name_string.val[1], "root") == 0) {
69 krb5_principal rootprinc;
70 krb5_boolean userok;
71
67 res = "root";
72 res = "root";
68 else
73
74 ret = krb5_copy_principal(context, aname, &rootprinc);
75 if (ret)
76 return ret;
77
78 userok = krb5_kuserok(context, rootprinc, res);
79 krb5_free_principal(context, rootprinc);
80 if (!userok)
81 return KRB5_NO_LOCALNAME;
82
83 } else
69 return KRB5_NO_LOCALNAME;
70
71 len = strlen (res);
72 if (len >= lnsize)
73 return ERANGE;
84 return KRB5_NO_LOCALNAME;
85
86 len = strlen (res);
87 if (len >= lnsize)
88 return ERANGE;
74 strcpy (lname, res);
89 strlcpy (lname, res, lnsize);
90
75 return 0;
76}
91 return 0;
92}