diff options
Diffstat (limited to 'usr/src/uts/common/sys/klpd.h')
-rw-r--r-- | usr/src/uts/common/sys/klpd.h | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/usr/src/uts/common/sys/klpd.h b/usr/src/uts/common/sys/klpd.h index 535af85f89..32769f438f 100644 --- a/usr/src/uts/common/sys/klpd.h +++ b/usr/src/uts/common/sys/klpd.h @@ -19,15 +19,12 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ #ifndef _SYS_KLPD_H #define _SYS_KLPD_H -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <sys/priv.h> #include <sys/procset.h> @@ -61,11 +58,16 @@ struct credklpd; int klpd_reg(int, idtype_t, id_t, priv_set_t *); int klpd_unreg(int, idtype_t, id_t); -void klpd_remove(struct klpd_reg **); +void klpd_freelist(struct klpd_reg **); void klpd_rele(struct klpd_reg *); int klpd_call(const cred_t *, const priv_set_t *, va_list); void crklpd_hold(struct credklpd *); void crklpd_rele(struct credklpd *); +int pfexec_reg(int); +int pfexec_unreg(int); +int pfexec_call(const cred_t *, struct pathname *, cred_t **, boolean_t *); +int get_forced_privs(const cred_t *, const char *, priv_set_t *); +int check_user_privs(const cred_t *, const priv_set_t *); #endif /* _KERNEL */ @@ -95,6 +97,50 @@ typedef struct klpd_arg { #define kla_int kla_data.__idata #define kla_uint kla_data.__uidata +#define PFEXEC_ARG_VERS 0x1 +#define PFEXEC_EXEC_ATTRS 0x1 /* pfexec_reply_t */ +#define PFEXEC_FORCED_PRIVS 0x2 /* priv_set_t */ +#define PFEXEC_USER_PRIVS 0x3 /* uint32_t */ + +#define PFEXEC_ARG_SIZE(bufsize) \ + (offsetof(pfexec_arg_t, pfa_data) + (bufsize)) + +typedef struct pfexec_arg { + uint_t pfa_vers; /* Caller version */ + uint_t pfa_call; /* Call type */ + uint_t pfa_len; /* Length of data */ + uid_t pfa_uid; /* Real uid of subject */ + union { + char __pfa_path[1]; + uint32_t __pfa_buf[1]; + } pfa_data; +} pfexec_arg_t; + +#define pfa_path pfa_data.__pfa_path +#define pfa_buf pfa_data.__pfa_buf + +#define PFEXEC_NOTSET ((uid_t)-1) + +typedef struct pfexec_reply { + uint_t pfr_vers; + uint_t pfr_len; + uid_t pfr_ruid, pfr_euid; + gid_t pfr_rgid, pfr_egid; + boolean_t pfr_setcred; + boolean_t pfr_scrubenv; + boolean_t pfr_clearflag; + boolean_t pfr_allowed; + uint_t pfr_ioff; + uint_t pfr_loff; +} pfexec_reply_t; + +#define PFEXEC_REPLY_IPRIV(pfr) \ + ((pfr)->pfr_ioff ? (priv_set_t *)((char *)(pfr) + (pfr)->pfr_ioff) \ + : (priv_set_t *)0) +#define PFEXEC_REPLY_LPRIV(pfr) \ + ((pfr)->pfr_loff ? (priv_set_t *)((char *)(pfr) + (pfr)->pfr_loff) \ + : (priv_set_t *)0) + #ifdef __cplusplus } #endif |