feat(3p/nix): remove builtins.importNative
This is the shared object equivalent of builtins.exec, or a plugins equivalent accessible from the Nix language. Either way, since we don't have builtins.exec or plugins any more, I think it makes sense to remove this builtin. This will also allow us to drop the allow-unsafe-native-code-during-evaluation option, which formerly controlled whether builtins.exec and builtins.importNative were enabled. Cc: Griffin Smith <grfn@gws.fyi> Cc: Profpatsch <mail@profpatsch.de> Change-Id: I8993a8a79d559c102647308a2684c089bbc06713 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1340 Reviewed-by: glittershark <grfn@gws.fyi> Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
b1c0866037
commit
855995325e
2 changed files with 0 additions and 55 deletions
50
third_party/nix/src/libexpr/primops.cc
vendored
50
third_party/nix/src/libexpr/primops.cc
vendored
|
@ -5,7 +5,6 @@
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
|
||||||
#include <absl/strings/str_split.h>
|
#include <absl/strings/str_split.h>
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -162,52 +161,6 @@ static void prim_scopedImport(EvalState& state, const Pos& pos, Value** args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Want reasonable symbol names, so extern C */
|
|
||||||
/* !!! Should we pass the Pos or the file name too? */
|
|
||||||
extern "C" using ValueInitializer = void(*)(EvalState&, Value&);
|
|
||||||
|
|
||||||
/* Load a ValueInitializer from a DSO and return whatever it initializes */
|
|
||||||
void prim_importNative(EvalState& state, const Pos& pos, Value** args,
|
|
||||||
Value& v) {
|
|
||||||
PathSet context;
|
|
||||||
Path path = state.coerceToPath(pos, *args[0], context);
|
|
||||||
|
|
||||||
try {
|
|
||||||
state.realiseContext(context);
|
|
||||||
} catch (InvalidPathError& e) {
|
|
||||||
throw EvalError(
|
|
||||||
format("cannot import '%1%', since path '%2%' is not valid, at %3%") %
|
|
||||||
path % e.path % pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
path = state.checkSourcePath(path);
|
|
||||||
|
|
||||||
std::string sym = state.forceStringNoCtx(*args[1], pos);
|
|
||||||
|
|
||||||
void* handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_LOCAL);
|
|
||||||
if (handle == nullptr) {
|
|
||||||
throw EvalError(format("could not open '%1%': %2%") % path % dlerror());
|
|
||||||
}
|
|
||||||
|
|
||||||
dlerror();
|
|
||||||
auto func = (ValueInitializer)dlsym(handle, sym.c_str());
|
|
||||||
if (func == nullptr) {
|
|
||||||
char* message = dlerror();
|
|
||||||
if (message != nullptr) {
|
|
||||||
throw EvalError(format("could not load symbol '%1%' from '%2%': %3%") %
|
|
||||||
sym % path % message);
|
|
||||||
}
|
|
||||||
throw EvalError(format("symbol '%1%' from '%2%' resolved to NULL when a "
|
|
||||||
"function pointer was expected") %
|
|
||||||
sym % path);
|
|
||||||
}
|
|
||||||
|
|
||||||
(func)(state, v);
|
|
||||||
|
|
||||||
/* We don't dlclose because v may be a primop referencing a function in the
|
|
||||||
* shared object file */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return a string representing the type of the expression. */
|
/* Return a string representing the type of the expression. */
|
||||||
static void prim_typeOf(EvalState& state, const Pos& pos, Value** args,
|
static void prim_typeOf(EvalState& state, const Pos& pos, Value** args,
|
||||||
Value& v) {
|
Value& v) {
|
||||||
|
@ -2239,9 +2192,6 @@ void EvalState::createBaseEnv() {
|
||||||
mkApp(v, *vScopedImport, *v2);
|
mkApp(v, *vScopedImport, *v2);
|
||||||
forceValue(v);
|
forceValue(v);
|
||||||
addConstant("import", v);
|
addConstant("import", v);
|
||||||
if (evalSettings.enableNativeCode) {
|
|
||||||
addPrimOp("__importNative", 2, prim_importNative);
|
|
||||||
}
|
|
||||||
addPrimOp("__typeOf", 1, prim_typeOf);
|
addPrimOp("__typeOf", 1, prim_typeOf);
|
||||||
addPrimOp("isNull", 1, prim_isNull);
|
addPrimOp("isNull", 1, prim_isNull);
|
||||||
addPrimOp("__isFunction", 1, prim_isFunction);
|
addPrimOp("__isFunction", 1, prim_isFunction);
|
||||||
|
|
5
third_party/nix/src/libexpr/primops.hh
vendored
5
third_party/nix/src/libexpr/primops.hh
vendored
|
@ -14,9 +14,4 @@ struct RegisterPrimOp {
|
||||||
RegisterPrimOp(const std::string& name, size_t arity, PrimOpFun fun);
|
RegisterPrimOp(const std::string& name, size_t arity, PrimOpFun fun);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* These primops are disabled without enableNativeCode */
|
|
||||||
/* Load a ValueInitializer from a DSO and return whatever it initializes */
|
|
||||||
void prim_importNative(EvalState& state, const Pos& pos, Value** args,
|
|
||||||
Value& v);
|
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
Loading…
Add table
Reference in a new issue