-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
+/*
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright (c) 2004 Cluster File Systems, Inc.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
*
- * This file is part of Lustre, http://www.lustre.org.
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
*
- * Lustre is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
*
- * Lustre is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
*
- * You should have received a copy of the GNU General Public License
- * along with Lustre; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Copyright (c) 2012, Whamcloud, Inc.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
*/
#include <stdlib.h>
#ifdef _AIX
#include "syscall_AIX.h"
#else
-#include <syscall.h>
+#include <sys/syscall.h>
#endif
#include <sys/utsname.h>
#ifdef HAVE_NETINET_IN_H
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_CATAMOUNT_DATA_H
-#include <catamount/data.h>
-#endif
#include "lutil.h"
-unsigned int libcfs_subsystem_debug = ~0 - (S_LNET | S_LND);
-unsigned int libcfs_debug = 0;
struct task_struct *current;
return ldlm_namespace_cleanup;
else if (!strcmp(arg, "ldlm_replay_locks"))
return ldlm_replay_locks;
-#ifdef HAVE_QUOTA_SUPPORT
- else if (!strcmp(arg, "osc_quota_interface"))
- return &osc_quota_interface;
- else if (!strcmp(arg, "mdc_quota_interface"))
- return &mdc_quota_interface;
- else if (!strcmp(arg, "lov_quota_interface"))
- return &lov_quota_interface;
-#endif
else
return NULL;
}
void liblustre_init_random()
{
- int _rand_dev_fd;
int seed[2];
struct timeval tv;
#ifdef LIBLUSTRE_USE_URANDOM
+ int _rand_dev_fd;
_rand_dev_fd = syscall(SYS_open, "/dev/urandom", O_RDONLY);
if (_rand_dev_fd >= 0) {
if (syscall(SYS_read, _rand_dev_fd,
&seed, sizeof(seed)) == sizeof(seed)) {
- ll_srand(seed[0], seed[1]);
+ cfs_srand(seed[0], seed[1]);
+ syscall(SYS_close, _rand_dev_fd);
return;
}
syscall(SYS_close, _rand_dev_fd);
seed[0] = _my_pnid;
#endif
gettimeofday(&tv, NULL);
- ll_srand(tv.tv_sec ^ __swab32(seed[0]), tv.tv_usec ^__swab32(getpid()));
+ cfs_srand(tv.tv_sec ^ __swab32(seed[0]), tv.tv_usec ^__swab32(getpid()));
}
-void get_random_bytes(void *buf, int size)
-{
- int *p = buf;
- int rem;
- LASSERT(size >= 0);
-
- rem = min((unsigned long)buf & (sizeof(int) - 1), size);
- if (rem) {
- int val = ll_rand();
- memcpy(buf, &val, rem);
- p = buf + rem;
- size -= rem;
- }
-
- while (size >= sizeof(int)) {
- *p = ll_rand();
- size -= sizeof(int);
- p++;
- }
- buf = p;
- if (size) {
- int val = ll_rand();
- memcpy(buf, &val, size);
- }
-}
-
-static void init_capability(int *res)
+static void init_capability(__u32 *res)
{
#ifdef HAVE_LIBCAP
cap_t syscap;
#endif
}
-int in_group_p(gid_t gid)
+int cfs_curproc_is_in_groups(gid_t gid)
{
int i;
strncpy(current->comm, comm, sizeof(current->comm));
current->pid = getpid();
+ current->gid = getgid();
current->fsuid = geteuid();
current->fsgid = getegid();
memset(¤t->pending, 0, sizeof(current->pending));
return 0;
}
-void generate_random_uuid(unsigned char uuid_out[16])
+void cfs_cap_raise(cfs_cap_t cap)
+{
+ current->cap_effective |= (1 << cap);
+}
+
+void cfs_cap_lower(cfs_cap_t cap)
+{
+ current->cap_effective &= ~(1 << cap);
+}
+
+int cfs_cap_raised(cfs_cap_t cap)
+{
+ return current->cap_effective & (1 << cap);
+}
+
+cfs_cap_t cfs_curproc_cap_pack(void) {
+ return cfs_current()->cap_effective;
+}
+
+void cfs_curproc_cap_unpack(cfs_cap_t cap) {
+ cfs_current()->cap_effective = cap;
+}
+
+int cfs_capable(cfs_cap_t cap)
{
- get_random_bytes(uuid_out, sizeof(uuid_out));
+ return cfs_cap_raised(cap);
}
int init_lib_portals()