@ai-ecoverse/slicc-kernel 1.173.1 → 1.173.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7513,7 +7513,7 @@ var init_version = __esm({
7513
7513
  "src/version.ts"() {
7514
7514
  "use strict";
7515
7515
  init_captured_globals();
7516
- KERNEL_VERSION = true ? "1.173.1" : "0.0.0-dev";
7516
+ KERNEL_VERSION = true ? "1.173.3" : "0.0.0-dev";
7517
7517
  OS_RELEASE = "6.0.0-slicc";
7518
7518
  }
7519
7519
  });
@@ -7512,7 +7512,7 @@ var init_version = __esm({
7512
7512
  "src/version.ts"() {
7513
7513
  "use strict";
7514
7514
  init_captured_globals();
7515
- KERNEL_VERSION = true ? "1.173.1" : "0.0.0-dev";
7515
+ KERNEL_VERSION = true ? "1.173.3" : "0.0.0-dev";
7516
7516
  OS_RELEASE = "6.0.0-slicc";
7517
7517
  }
7518
7518
  });
package/dist/node.js CHANGED
@@ -3702,7 +3702,7 @@ function satisfies(version, range2) {
3702
3702
  }
3703
3703
 
3704
3704
  // src/version.ts
3705
- var KERNEL_VERSION = true ? "1.173.1" : "0.0.0-dev";
3705
+ var KERNEL_VERSION = true ? "1.173.3" : "0.0.0-dev";
3706
3706
  var OS_RELEASE = "6.0.0-slicc";
3707
3707
  function procVersion() {
3708
3708
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -30649,10 +30649,66 @@ var RULE = new RegExp(
30649
30649
  );
30650
30650
  var TERM = /^[A-Za-z0-9._+-]+$/;
30651
30651
  var PLAIN3 = /^[A-Za-z0-9_@%+=:,./-]+$/;
30652
+ var CONTROL = /[\0-\x1f\x7f]/;
30652
30653
  var USAGE = "usage: sudo [-n] [-u user] [--] command [args...]\n sudo -l";
30654
+ var DENIED2 = "sudo: approval denied";
30655
+ var DENIAL_MAX = 500;
30656
+ var ABORTED = /* @__PURE__ */ Symbol("aborted");
30657
+ function hasControl(text) {
30658
+ return CONTROL.test(text);
30659
+ }
30660
+ function withoutControl(text) {
30661
+ return text.replace(CONTROL, (ch) => {
30662
+ const n = ch.charCodeAt(0);
30663
+ if (n === 9) return "\\t";
30664
+ if (n === 10) return "\\n";
30665
+ if (n === 13) return "\\r";
30666
+ return `\\x${n.toString(16).padStart(2, "0")}`;
30667
+ });
30668
+ }
30653
30669
  function failed3(errno3, error) {
30654
30670
  return { error, errno: errno3 };
30655
30671
  }
30672
+ function denialText(answer2) {
30673
+ try {
30674
+ if (typeof answer2 !== "object" || answer2 === null) return DENIED2;
30675
+ const { answer: kind, message: message3 } = answer2;
30676
+ if (kind !== "deny" || typeof message3 !== "string") return DENIED2;
30677
+ const chars = [
30678
+ ...message3.replace(/[\t\n\v\f\r\u0085\u2028\u2029]+/g, " ").replace(new RegExp("\\p{Cc}", "gu"), "").trimEnd()
30679
+ ];
30680
+ const text = chars.length > DENIAL_MAX ? `${chars.slice(0, DENIAL_MAX - 1).join("")}\u2026` : chars.join("");
30681
+ return text.startsWith("sudo: ") && text.slice(6).trim() !== "" ? text : DENIED2;
30682
+ } catch {
30683
+ return DENIED2;
30684
+ }
30685
+ }
30686
+ async function answerOf2(approve, req, signal) {
30687
+ let reply;
30688
+ let cut;
30689
+ const snapshot = () => reply === void 0 ? Promise.resolve(ABORTED) : Promise.race([reply, Promise.resolve(ABORTED)]).catch(() => "deny");
30690
+ const aborted3 = new Promise(
30691
+ (resolve2) => signal.addEventListener(
30692
+ "abort",
30693
+ () => {
30694
+ cut = snapshot();
30695
+ resolve2();
30696
+ },
30697
+ { once: true }
30698
+ )
30699
+ );
30700
+ try {
30701
+ reply = Promise.resolve(approve(req, { signal }));
30702
+ } catch {
30703
+ reply = Promise.resolve("deny");
30704
+ }
30705
+ try {
30706
+ const answer2 = await Promise.race([reply, aborted3]);
30707
+ return cut === void 0 ? answer2 : await cut;
30708
+ } catch {
30709
+ return cut === void 0 ? "deny" : await cut;
30710
+ }
30711
+ }
30656
30712
  function unescaped(double) {
30657
30713
  return double.replace(/\\(["\\$`])/g, "$1");
30658
30714
  }
@@ -30675,7 +30731,8 @@ function splitWords(text) {
30675
30731
  return words2;
30676
30732
  }
30677
30733
  function quoteWord(word) {
30678
- return PLAIN3.test(word) ? word : `'${word.replaceAll("'", `'\\''`)}'`;
30734
+ const text = hasControl(word) ? withoutControl(word) : word;
30735
+ return PLAIN3.test(text) ? text : `'${text.replaceAll("'", `'\\''`)}'`;
30679
30736
  }
30680
30737
  function addPart(word, part) {
30681
30738
  const last = word.length - 1;
@@ -30811,7 +30868,7 @@ function recordedBare(line, file, rule) {
30811
30868
  const head = `NOPASSWD ${rule.who} (${rule.target}) `;
30812
30869
  const cmnd = `Cmnd ${quoteWord(rule.cmnd.path)}`;
30813
30870
  const cwd = rule.cwd === void 0 ? "" : `Cwd ${quoteWord(rule.cwd)} `;
30814
- return line === `${head}${cwd}${cmnd}`;
30871
+ return line.trimEnd() === `${head}${cwd}${cmnd}`;
30815
30872
  }
30816
30873
  function flags(parsed2, arg, next3) {
30817
30874
  for (let j = 1; j < arg.length; j++) {
@@ -31042,7 +31099,7 @@ ${lines2}
31042
31099
  }
31043
31100
  async ask(caller, self, target, argv, path, cwd, requester) {
31044
31101
  const { approve } = this.o;
31045
- if (!approve || requester.aborted) return failed3("EACCES", "sudo: approval denied");
31102
+ if (!approve || requester.aborted) return failed3("EACCES", DENIED2);
31046
31103
  const createdAt = Date.now();
31047
31104
  const timeout = this.o.timeoutMs ?? SUDO_TIMEOUT_MS;
31048
31105
  const req = {
@@ -31065,16 +31122,14 @@ ${lines2}
31065
31122
  const timer = setTimeout(() => control.abort("expired"), timeout);
31066
31123
  const withdraw = () => control.abort("withdrawn");
31067
31124
  requester.addEventListener("abort", withdraw, { once: true });
31068
- const aborted3 = new Promise(
31069
- (resolve2) => control.signal.addEventListener("abort", () => resolve2("aborted"), { once: true })
31070
- );
31125
+ const ended = () => control.signal.reason === "expired" ? failed3("ETIMEDOUT", "sudo: the request expired") : failed3("EINTR", "sudo: the request was withdrawn");
31071
31126
  try {
31072
- const answered = Promise.resolve().then(() => approve(req, { signal: control.signal })).catch(() => "deny");
31073
- const answer2 = await Promise.race([answered, aborted3]);
31074
- if (answer2 === "aborted" || control.signal.aborted) {
31075
- return control.signal.reason === "expired" ? failed3("ETIMEDOUT", "sudo: the request expired") : failed3("EINTR", "sudo: the request was withdrawn");
31127
+ const answer2 = await answerOf2(approve, req, control.signal);
31128
+ if (answer2 === ABORTED) return ended();
31129
+ if (answer2 === "once" || answer2 === "always") {
31130
+ return control.signal.aborted ? ended() : answer2;
31076
31131
  }
31077
- return answer2 === "once" || answer2 === "always" ? answer2 : failed3("EACCES", "sudo: approval denied");
31132
+ return failed3("EACCES", denialText(answer2));
31078
31133
  } finally {
31079
31134
  clearTimeout(timer);
31080
31135
  requester.removeEventListener("abort", withdraw);
@@ -31084,6 +31139,7 @@ ${lines2}
31084
31139
  const { fs } = this.o;
31085
31140
  const path = `${SUDOERS_D}/${self.name}`;
31086
31141
  if (!NAME3.test(self.name)) return false;
31142
+ if (hasControl(cwd) || argv.some(hasControl)) return false;
31087
31143
  try {
31088
31144
  await this.provision();
31089
31145
  if (!await this.trusted(SUDOERS_D)) return false;