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