Introduce a uid_t type for user IDs.
authorcoderain <coderain@sdf.org>
Mon, 18 Jun 2018 18:15:20 +0000 (20:15 +0200)
committercoderain <coderain@sdf.org>
Mon, 18 Jun 2018 18:15:20 +0000 (20:15 +0200)
kernel/src/user.c
sdk/user.h

index 5cdf9f55b1df364f532540090a8ef02913c183fd..c83fbf8b2f4c61ab8683f985831f2ae8fc349c38 100644 (file)
@@ -22,7 +22,7 @@
 #include <heap.h>
 #include <timer.h>
 
-static user_t *reference_user_by_id(dword_t uid)
+static user_t *reference_user_by_id(uid_t uid)
 {
     user_t *user = NULL;
 
@@ -34,7 +34,7 @@ static user_t *reference_user_by_id(dword_t uid)
     return NULL;
 }
 
-static dword_t add_user(dword_t uid, const char *name, dword_t *password_hash, qword_t privileges)
+static dword_t add_user(uid_t uid, const char *name, dword_t *password_hash, qword_t privileges)
 {
     user_t *user;
 
@@ -172,10 +172,10 @@ bool_t check_privileges(qword_t privilege_mask)
 dword_t get_current_uid(void)
 {
     process_t *proc = get_current_process();
-    return proc->current_user->uid;
+    return proc && proc->current_user ? proc->current_user->uid : 0;
 }
 
-sysret_t syscall_set_user_id(dword_t uid)
+sysret_t syscall_set_user_id(uid_t uid)
 {
     process_t *proc = get_current_process();
     user_t *user = reference_user_by_id(uid);
@@ -210,7 +210,7 @@ sysret_t syscall_revert_user()
     }
 }
 
-sysret_t syscall_create_user(dword_t uid, const char *name, dword_t *password_hash, qword_t privileges)
+sysret_t syscall_create_user(uid_t uid, const char *name, dword_t *password_hash, qword_t privileges)
 {
     dword_t safe_password_hash[64];
 
@@ -234,7 +234,7 @@ sysret_t syscall_create_user(dword_t uid, const char *name, dword_t *password_ha
     return add_user(uid, name, password_hash, privileges);
 }
 
-sysret_t syscall_delete_user(dword_t uid)
+sysret_t syscall_delete_user(uid_t uid)
 {
     if (get_previous_mode() == USER_MODE && !check_privileges(PRIVILEGE_MANAGE_USERS))
     {
@@ -267,7 +267,7 @@ sysret_t syscall_delete_user(dword_t uid)
     return ERR_SUCCESS;
 }
 
-sysret_t syscall_logon_user(dword_t uid, const char *password)
+sysret_t syscall_logon_user(uid_t uid, const char *password)
 {
     dword_t ret;
     process_t *proc = get_current_process();
@@ -322,7 +322,7 @@ cleanup:
     return ret;
 }
 
-sysret_t syscall_query_user(dword_t uid, user_info_t info_type, void *buffer, dword_t size)
+sysret_t syscall_query_user(uid_t uid, user_info_t info_type, void *buffer, dword_t size)
 {
     dword_t ret = ERR_SUCCESS;
     void *safe_buffer;
index 9cc90a5419224e655bef154943815dad7b903ca3..aab7dbe21549e03436090f1d50323a6dff1dfa1e 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "defs.h"
 
+#define ALL_USERS (uid_t)-1
+
 #define MAX_USERNAME_LENGTH 32
 
 #define PRIVILEGE_LOGON_USER       (1ULL << 0)
 
 #define ALL_PRIVILEGES 0xFFFFFFFFFFFFFFFFULL
 
+typedef dword_t uid_t;
+
 typedef enum
 {
     USER_NAME_INFO,
     USER_PRIVILEGE_INFO,
 } user_info_t;
 
-sysret_t syscall_create_user(dword_t uid, const char *name, dword_t *password_hash, qword_t privileges);
-sysret_t syscall_delete_user(dword_t uid);
-sysret_t syscall_set_user_id(dword_t uid);
+sysret_t syscall_create_user(uid_t uid, const char *name, dword_t *password_hash, qword_t privileges);
+sysret_t syscall_delete_user(uid_t uid);
+sysret_t syscall_set_user_id(uid_t uid);
 sysret_t syscall_revert_user(void);
-sysret_t syscall_logon_user(dword_t uid, const char *password);
-sysret_t syscall_query_user(dword_t uid, user_info_t info_type, void *buffer, dword_t size);
+sysret_t syscall_logon_user(uid_t uid, const char *password);
+sysret_t syscall_query_user(uid_t uid, user_info_t info_type, void *buffer, dword_t size);
 
 #endif