mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-28 20:09:35 +03:00
ec7d53e99a
The previous credential implementation simply provided the needed types and a couple of dummy functions needed. This update correctly ties the basic Solaris credential API in to one of two Linux kernel APIs. Prior to 2.6.29 the linux kernel embeded all credentials in the task structure. For these kernels, we pass around the entire task struct as if it were the credential, then we use the helper functions to extract the credential related bits. As of 2.6.29 a new credential type was added which we can and do fairly cleanly layer on top of. Once again the helper functions nicely hide the implementation details from all callers. Three tests were added to the splat test framework to verify basic correctness. They should be extended as needed when need credential functions are added.
45 lines
957 B
C
45 lines
957 B
C
#ifndef _SPL_CRED_H
|
|
#define _SPL_CRED_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <linux/module.h>
|
|
#include <sys/types.h>
|
|
#include <sys/vfs.h>
|
|
|
|
#ifdef HAVE_CRED_STRUCT
|
|
|
|
typedef struct cred cred_t;
|
|
|
|
#define kcred ((cred_t *)(init_task.cred))
|
|
#define CRED() ((cred_t *)current_cred())
|
|
|
|
#else
|
|
|
|
typedef struct task_struct cred_t;
|
|
|
|
#define kcred ((cred_t *)&init_task)
|
|
#define CRED() ((cred_t *)current)
|
|
|
|
#endif /* HAVE_CRED_STRUCT */
|
|
|
|
extern void crhold(cred_t *cr);
|
|
extern void crfree(cred_t *cr);
|
|
extern uid_t crgetuid(const cred_t *cr);
|
|
extern uid_t crgetruid(const cred_t *cr);
|
|
extern uid_t crgetsuid(const cred_t *cr);
|
|
extern gid_t crgetgid(const cred_t *cr);
|
|
extern gid_t crgetrgid(const cred_t *cr);
|
|
extern gid_t crgetsgid(const cred_t *cr);
|
|
extern int crgetngroups(const cred_t *cr);
|
|
extern gid_t * crgetgroups(const cred_t *cr);
|
|
extern int groupmember(gid_t gid, const cred_t *cr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SPL_CRED_H */
|