Whamcloud - gitweb
f62203d56db0d8b225d1122959f95d223205fff0
[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_krb5;
21
22 /*
23  * convenient macros, these perhaps need further cleanup
24  */
25 #ifdef HAVE_KRB5
26
27 #define KEYTAB_ENTRY_MATCH(kte, name)                                           \
28         (                                                                       \
29          (kte).principal->data[0].length == (sizeof(name)-1) &&                 \
30          strncmp((kte).principal->data[0].data, (name), sizeof(name)-1) == 0    \
31         )
32
33 #define KRB5_FREE_UNPARSED_NAME(ctx, name)                                      \
34         krb5_free_unparsed_name((ctx), (name));
35
36 #define KRB5_STRDUP(str)                                                        \
37         strndup((str).data, (str).length)
38
39 #define KRB5_STRCMP(str, name)                                                  \
40         (                                                                       \
41          (str)->length != strlen(name) ||                                       \
42          strncmp((str)->data, (name), (str)->length) != 0                       \
43         )
44
45 #define KRB5_STRCASECMP(str, name)                                              \
46         (                                                                       \
47          (str)->length != strlen(name) ||                                       \
48          strncasecmp((str)->data, (name), (str)->length) != 0                   \
49         )
50
51 static inline
52 char *lgss_krb5_strdup(krb5_data *kstr)
53 {
54         return strndup(kstr->data, kstr->length);
55 }
56
57 static inline
58 int lgss_krb5_strcmp(krb5_data *kstr, const char *str)
59 {
60         return (kstr->length != strlen(str) ||
61                 memcmp(kstr->data, str, kstr->length) != 0);
62 }
63
64 static inline
65 int lgss_krb5_strcasecmp(krb5_data *kstr, const char *str)
66 {
67         return (kstr->length != strlen(str) ||
68                 strncasecmp(kstr->data, str, kstr->length) != 0);
69 }
70
71 #else /* !HAVE_KRB5 */
72
73 #define KEYTAB_ENTRY_MATCH(kte, name)                                           \
74         (                                                                       \
75          strlen((kte).principal->name.name_string.val[0]) ==                    \
76          (sizeof(name)-1) &&                                                    \
77          strncmp(kte.principal->name.name_string.val[0], (name),                \
78                  sizeof(name)-1) == 0                                           \
79         )
80
81 #define KRB5_FREE_UNPARSED_NAME(ctx, name)                                      \
82         free(pname);
83
84 #define KRB5_STRDUP(str)                                                        \
85         strdup(str)
86
87 #define KRB5_STRCMP(str, name)                                                  \
88         strcmp((str), (name))
89
90 #define KRB5_STRCASECMP(str, name)                                              \
91         strcmp((str), (name))
92
93 #endif /* HAVE_KRB5 */
94
95 #endif /* LGSS_KRB5_UTILS_H */