Whamcloud - gitweb
LU-3289 gss: Add userspace support for GSS null and sk
[fs/lustre-release.git] / lustre / utils / gss / lgss_krb5_utils.h
1 /*
2  * Modifications for Lustre
3  *
4  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
5  *
6  * Author: Eric Mei <ericm@clusterfs.com>
7  */
8
9 #ifndef LGSS_KRB5_UTILS_H
10 #define LGSS_KRB5_UTILS_H
11
12 #ifndef _GNU_SOURCE
13 #define _GNU_SOURCE
14 #endif
15 #include <string.h>
16 #include <krb5.h>
17
18 #include "lgss_utils.h"
19
20 extern struct lgss_mech_type lgss_mech_null;
21 extern struct lgss_mech_type lgss_mech_sk;
22 extern struct lgss_mech_type lgss_mech_krb5;
23
24 /*
25  * convenient macros, these perhaps need further cleanup
26  */
27 #ifdef HAVE_KRB5
28
29 #define KEYTAB_ENTRY_MATCH(kte, name)                                           \
30         (                                                                       \
31          (kte).principal->data[0].length == (sizeof(name)-1) &&                 \
32          strncmp((kte).principal->data[0].data, (name), sizeof(name)-1) == 0    \
33         )
34
35 #define KRB5_FREE_UNPARSED_NAME(ctx, name)                                      \
36         krb5_free_unparsed_name((ctx), (name));
37
38 #define KRB5_STRDUP(str)                                                        \
39         strndup((str).data, (str).length)
40
41 #define KRB5_STRCMP(str, name)                                                  \
42         (                                                                       \
43          (str)->length != strlen(name) ||                                       \
44          strncmp((str)->data, (name), (str)->length) != 0                       \
45         )
46
47 #define KRB5_STRCASECMP(str, name)                                              \
48         (                                                                       \
49          (str)->length != strlen(name) ||                                       \
50          strncasecmp((str)->data, (name), (str)->length) != 0                   \
51         )
52
53 static inline
54 char *lgss_krb5_strdup(krb5_data *kstr)
55 {
56         return strndup(kstr->data, kstr->length);
57 }
58
59 static inline
60 int lgss_krb5_strcmp(krb5_data *kstr, const char *str)
61 {
62         return (kstr->length != strlen(str) ||
63                 memcmp(kstr->data, str, kstr->length) != 0);
64 }
65
66 static inline
67 int lgss_krb5_strcasecmp(krb5_data *kstr, const char *str)
68 {
69         return (kstr->length != strlen(str) ||
70                 strncasecmp(kstr->data, str, kstr->length) != 0);
71 }
72
73 #else /* !HAVE_KRB5 */
74
75 #define KEYTAB_ENTRY_MATCH(kte, name)                                           \
76         (                                                                       \
77          strlen((kte).principal->name.name_string.val[0]) ==                    \
78          (sizeof(name)-1) &&                                                    \
79          strncmp(kte.principal->name.name_string.val[0], (name),                \
80                  sizeof(name)-1) == 0                                           \
81         )
82
83 #define KRB5_FREE_UNPARSED_NAME(ctx, name)                                      \
84         free(pname);
85
86 #define KRB5_STRDUP(str)                                                        \
87         strdup(str)
88
89 #define KRB5_STRCMP(str, name)                                                  \
90         strcmp((str), (name))
91
92 #define KRB5_STRCASECMP(str, name)                                              \
93         strcmp((str), (name))
94
95 #endif /* HAVE_KRB5 */
96
97 #endif /* LGSS_KRB5_UTILS_H */