mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
auth: network
This commit is contained in:
@@ -4,12 +4,14 @@
|
|||||||
#include <kernel/cred.h>
|
#include <kernel/cred.h>
|
||||||
#include <kernel/vfs.h>
|
#include <kernel/vfs.h>
|
||||||
#include <kernel/scheduler.h>
|
#include <kernel/scheduler.h>
|
||||||
|
#include <kernel/sock.h>
|
||||||
|
|
||||||
#define AUTH_SCOPE_COUNT 4
|
#define AUTH_SCOPE_COUNT 5
|
||||||
#define AUTH_SCOPE_SYSTEM 0
|
#define AUTH_SCOPE_SYSTEM 0
|
||||||
#define AUTH_SCOPE_FILESYSTEM 1
|
#define AUTH_SCOPE_FILESYSTEM 1
|
||||||
#define AUTH_SCOPE_CRED 2
|
#define AUTH_SCOPE_CRED 2
|
||||||
#define AUTH_SCOPE_PROCESS 3
|
#define AUTH_SCOPE_PROCESS 3
|
||||||
|
#define AUTH_SCOPE_NETWORK 4
|
||||||
|
|
||||||
#define AUTH_LISTENER_LIMIT 8
|
#define AUTH_LISTENER_LIMIT 8
|
||||||
|
|
||||||
@@ -37,6 +39,8 @@
|
|||||||
|
|
||||||
#define AUTH_ACTIONS_PROCESS_SIGNAL 1
|
#define AUTH_ACTIONS_PROCESS_SIGNAL 1
|
||||||
|
|
||||||
|
#define AUTH_ACTIONS_NETWORK_CONFIGURE 1
|
||||||
|
|
||||||
typedef int (*authlistener_t)(cred_t *cred, int actions, void *arg0, void *arg1, void *arg2);
|
typedef int (*authlistener_t)(cred_t *cred, int actions, void *arg0, void *arg1, void *arg2);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -62,6 +66,10 @@ static inline int auth_process_check(cred_t *cred, int actions, proc_t *proc) {
|
|||||||
return auth_check(AUTH_SCOPE_PROCESS, cred, actions, proc, NULL, NULL);
|
return auth_check(AUTH_SCOPE_PROCESS, cred, actions, proc, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int auth_network_check(cred_t *cred, int actions, socket_t *socket, netdev_t *netdev) {
|
||||||
|
return auth_check(AUTH_SCOPE_NETWORK, cred, actions, socket, netdev, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int auth_filesystem_convertaccess(int access) {
|
static inline int auth_filesystem_convertaccess(int access) {
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -272,9 +272,21 @@ static int process(cred_t *cred, int actions, void *arg0, void *arg1, void *arg2
|
|||||||
return weight ? AUTH_DECISION_ALLOW : AUTH_DECISION_DEFER;
|
return weight ? AUTH_DECISION_ALLOW : AUTH_DECISION_DEFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int network(cred_t *cred, int actions, void *arg0, void *arg1, void *arg2) {
|
||||||
|
//socket_t *socket = arg0;
|
||||||
|
//netdev_t *netdev = arg1;
|
||||||
|
|
||||||
|
// for now, all checks will just be privileged operations
|
||||||
|
if (CRED_IS_ESU(cred))
|
||||||
|
return AUTH_DECISION_ALLOW;
|
||||||
|
else
|
||||||
|
return AUTH_DECISION_DENY;
|
||||||
|
}
|
||||||
|
|
||||||
void defaultauth_init() {
|
void defaultauth_init() {
|
||||||
auth_registerlistener(AUTH_SCOPE_FILESYSTEM, filesystem);
|
auth_registerlistener(AUTH_SCOPE_FILESYSTEM, filesystem);
|
||||||
auth_registerlistener(AUTH_SCOPE_SYSTEM, system);
|
auth_registerlistener(AUTH_SCOPE_SYSTEM, system);
|
||||||
auth_registerlistener(AUTH_SCOPE_CRED, credlistener);
|
auth_registerlistener(AUTH_SCOPE_CRED, credlistener);
|
||||||
auth_registerlistener(AUTH_SCOPE_PROCESS, process);
|
auth_registerlistener(AUTH_SCOPE_PROCESS, process);
|
||||||
|
auth_registerlistener(AUTH_SCOPE_NETWORK, network);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user