4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
30 * Copyright (c) 2011, Intel Corporation.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * lustre/ptlrpc/gss/gss_rawobj.c
38 * Author: Eric Mei <ericm@clusterfs.com>
41 #define DEBUG_SUBSYSTEM S_SEC
43 #include <linux/mutex.h>
46 #include <obd_class.h>
47 #include <obd_support.h>
48 #include <lustre_sec.h>
50 #include "gss_internal.h"
52 int rawobj_empty(rawobj_t
*obj
)
54 LASSERT(equi(obj
->len
, obj
->data
));
55 return (obj
->len
== 0);
58 int rawobj_alloc(rawobj_t
*obj
, char *buf
, int len
)
65 OBD_ALLOC_LARGE(obj
->data
, len
);
70 memcpy(obj
->data
, buf
, len
);
76 void rawobj_free(rawobj_t
*obj
)
82 OBD_FREE_LARGE(obj
->data
, obj
->len
);
89 int rawobj_equal(rawobj_t
*a
, rawobj_t
*b
)
93 return (a
->len
== b
->len
&&
94 (!a
->len
|| !memcmp(a
->data
, b
->data
, a
->len
)));
97 int rawobj_dup(rawobj_t
*dest
, rawobj_t
*src
)
101 dest
->len
= src
->len
;
103 OBD_ALLOC_LARGE(dest
->data
, dest
->len
);
108 memcpy(dest
->data
, src
->data
, dest
->len
);
114 int rawobj_serialize(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
)
122 len
= cfs_size_round4(obj
->len
);
124 if (*buflen
< 4 + len
) {
125 CERROR("buflen %u < %u\n", *buflen
, 4 + len
);
129 *(*buf
)++ = cpu_to_le32(obj
->len
);
130 memcpy(*buf
, obj
->data
, obj
->len
);
132 *buflen
-= (4 + len
);
137 static int __rawobj_extract(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
,
138 int alloc
, int local
)
142 if (*buflen
< sizeof(__u32
)) {
143 CERROR("buflen %u\n", *buflen
);
147 obj
->len
= *(*buf
)++;
149 obj
->len
= le32_to_cpu(obj
->len
);
150 *buflen
-= sizeof(__u32
);
157 len
= local
? obj
->len
: cfs_size_round4(obj
->len
);
159 CERROR("buflen %u < %u\n", *buflen
, len
);
165 obj
->data
= (__u8
*) *buf
;
167 OBD_ALLOC_LARGE(obj
->data
, obj
->len
);
169 CERROR("fail to alloc %u bytes\n", obj
->len
);
173 memcpy(obj
->data
, *buf
, obj
->len
);
176 *((char **)buf
) += len
;
182 int rawobj_extract(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
)
184 return __rawobj_extract(obj
, buf
, buflen
, 0, 0);
187 int rawobj_extract_alloc(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
)
189 return __rawobj_extract(obj
, buf
, buflen
, 1, 0);
192 int rawobj_extract_local(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
)
194 return __rawobj_extract(obj
, buf
, buflen
, 0, 1);
197 int rawobj_extract_local_alloc(rawobj_t
*obj
, __u32
**buf
, __u32
*buflen
)
199 return __rawobj_extract(obj
, buf
, buflen
, 1, 1);
202 int rawobj_from_netobj(rawobj_t
*rawobj
, netobj_t
*netobj
)
204 rawobj
->len
= netobj
->len
;
205 rawobj
->data
= netobj
->data
;
209 int rawobj_from_netobj_alloc(rawobj_t
*rawobj
, netobj_t
*netobj
)
214 if (netobj
->len
== 0)
217 OBD_ALLOC_LARGE(rawobj
->data
, netobj
->len
);
218 if (rawobj
->data
== NULL
)
221 rawobj
->len
= netobj
->len
;
222 memcpy(rawobj
->data
, netobj
->data
, netobj
->len
);
226 /****************************************
228 ****************************************/
230 int buffer_extract_bytes(const void **buf
, __u32
*buflen
,
231 void *res
, __u32 reslen
)
233 if (*buflen
< reslen
) {
234 CERROR("buflen %u < %u\n", *buflen
, reslen
);
238 memcpy(res
, *buf
, reslen
);
This page took 0.037548 seconds and 5 git commands to generate.