summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/dts/lib.deno.unstable.d.ts12
-rw-r--r--cli/tests/unit/os_test.ts10
-rw-r--r--runtime/js/30_os.js5
-rw-r--r--runtime/js/90_deno_ns.js1
-rw-r--r--runtime/ops/os.rs17
5 files changed, 45 insertions, 0 deletions
diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts
index 0ed27c5d5..b8eb886e4 100644
--- a/cli/dts/lib.deno.unstable.d.ts
+++ b/cli/dts/lib.deno.unstable.d.ts
@@ -317,6 +317,18 @@ declare namespace Deno {
*/
export function getUid(): number | null;
+ /** **Unstable** new API. yet to be vetted.
+ *
+ * Returns the group id of the process on POSIX platforms. Returns null on windows.
+ *
+ * ```ts
+ * console.log(Deno.getGid());
+ * ```
+ *
+ * Requires `allow-env` permission.
+ */
+ export function getGid(): number | null;
+
/** All possible types for interfacing with foreign functions */
export type NativeType =
| "void"
diff --git a/cli/tests/unit/os_test.ts b/cli/tests/unit/os_test.ts
index 6ed1126f1..b5ff6f29f 100644
--- a/cli/tests/unit/os_test.ts
+++ b/cli/tests/unit/os_test.ts
@@ -204,3 +204,13 @@ Deno.test({ permissions: { env: true } }, function getUid() {
assert(uid > 0);
}
});
+
+Deno.test({ permissions: { env: true } }, function getGid() {
+ if (Deno.build.os === "windows") {
+ assertEquals(Deno.getGid(), null);
+ } else {
+ const gid = Deno.getGid();
+ assert(typeof gid === "number");
+ assert(gid > 0);
+ }
+});
diff --git a/runtime/js/30_os.js b/runtime/js/30_os.js
index 9cc2ba5c7..f9df42305 100644
--- a/runtime/js/30_os.js
+++ b/runtime/js/30_os.js
@@ -30,6 +30,10 @@
return core.opSync("op_network_interfaces");
}
+ function getGid() {
+ return core.opSync("op_getgid");
+ }
+
function getUid() {
return core.opSync("op_getuid");
}
@@ -94,6 +98,7 @@
env,
execPath,
exit,
+ getGid,
getUid,
hostname,
loadavg,
diff --git a/runtime/js/90_deno_ns.js b/runtime/js/90_deno_ns.js
index 879e63e57..24a31bc31 100644
--- a/runtime/js/90_deno_ns.js
+++ b/runtime/js/90_deno_ns.js
@@ -124,6 +124,7 @@
osRelease: __bootstrap.os.osRelease,
systemMemoryInfo: __bootstrap.os.systemMemoryInfo,
networkInterfaces: __bootstrap.os.networkInterfaces,
+ getGid: __bootstrap.os.getGid,
getUid: __bootstrap.os.getUid,
sleepSync: __bootstrap.timers.sleepSync,
listen: __bootstrap.netUnstable.listen,
diff --git a/runtime/ops/os.rs b/runtime/ops/os.rs
index c74a423ab..37da410ca 100644
--- a/runtime/ops/os.rs
+++ b/runtime/ops/os.rs
@@ -22,6 +22,7 @@ pub fn init(maybe_exit_code: Option<Arc<AtomicI32>>) -> Extension {
op_exit::decl(),
op_delete_env::decl(),
op_get_env::decl(),
+ op_getgid::decl(),
op_getuid::decl(),
op_hostname::decl(),
op_loadavg::decl(),
@@ -227,6 +228,22 @@ fn op_system_memory_info(
#[cfg(not(windows))]
#[op]
+fn op_getgid(state: &mut OpState) -> Result<Option<u32>, AnyError> {
+ super::check_unstable(state, "Deno.getGid");
+ state.borrow_mut::<Permissions>().env.check_all()?;
+ unsafe { Ok(Some(libc::getgid())) }
+}
+
+#[cfg(windows)]
+#[op]
+fn op_getgid(state: &mut OpState) -> Result<Option<u32>, AnyError> {
+ super::check_unstable(state, "Deno.getGid");
+ state.borrow_mut::<Permissions>().env.check_all()?;
+ Ok(None)
+}
+
+#[cfg(not(windows))]
+#[op]
fn op_getuid(state: &mut OpState) -> Result<Option<u32>, AnyError> {
super::check_unstable(state, "Deno.getUid");
state.borrow_mut::<Permissions>().env.check_all()?;