summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/klpd.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/sys/klpd.h')
-rw-r--r--usr/src/uts/common/sys/klpd.h56
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