I do not think that allowing to customize UDF classes whitelist has been discussed before. Feel free to open a JIRA ticket :-) I have some plans to revisit how we securise UDFs as the current threading approach has some impact in terms of latency. That can be a good opportunity to look into providing more flexibility.
Le lun. 28 mars 2022 à 15:00, Sébastien Rebecchi <srebec...@kameleoon.com> a écrit : > Thanks you very much! I will try that. > As you know, would it be a long-terms solution? Or is there any plan to > add the possibility to customize UDF classes whitelist? > > Le lun. 28 mars 2022 à 14:31, Benjamin Lerer <ble...@apache.org> a écrit : > >> Is there a way to customize that default behaviour? >> >> >> Looking at JavaBasedUDFunction quickly it seems that the ClassLoader is >> only used when you use the UDFExecutorService to execute your UDFs. You >> can try to disable it using "enable_user_defined_functions_threads: false" >> and see if it works. >> Now that also means that you have to ensure that only trusted persons can >> create UDF or UDA as it removes all safety mechanisms. >> >> Le lun. 28 mars 2022 à 13:23, Sébastien Rebecchi <srebec...@kameleoon.com> >> a écrit : >> >>> Hi Benjamin, >>> >>> Thanks for the answer. >>> Is there a way to customize that default behaviour? If no, could you >>> indicate where to find this class loader in the github of Cassandra please? >>> >>> Le lun. 28 mars 2022 à 12:40, Benjamin Lerer <ble...@apache.org> a >>> écrit : >>> >>>> Hi Sébastien, >>>> >>>> Cassandra uses a special classloader for UDFs that limit which classes >>>> can be used. >>>> You cannot rely on non-JDK classes for UDFs and some of the JDK >>>> packages like the IO package for example cannot be used. >>>> The goal is simply to ensure that UDFs cannot compromise the server >>>> security. >>>> >>>> Le lun. 28 mars 2022 à 11:31, Sébastien Rebecchi < >>>> srebec...@kameleoon.com> a écrit : >>>> >>>>> Hello, >>>>> >>>>> I am trying to create a UDF based on custom methods. >>>>> So I set enable_user_defined_functions to true and added a jar in >>>>> "/usr/share/cassandra/lib/" folder on every node, restarted the nodes and >>>>> I >>>>> can see from the command line that the jar is indeed used (in the >>>>> classpath >>>>> with -cp). >>>>> >>>>> But when i create the UDF I got that error: >>>>> >>>>> CREATE OR REPLACE FUNCTION blobToJson (input blob) RETURNS NULL ON >>>>> NULL INPUT RETURNS text LANGUAGE java AS 'return >>>>> com.kameleoon.visit.Visit.writeToJson(com.kameleoon.visit.Visit.readFromByteBuffer(input));'; >>>>> InvalidRequest: Error from server: code=2200 [Invalid query] >>>>> message="Java source compilation failed: >>>>> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type >>>>> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type >>>>> >>>>> Of course the class com.kameleoon.visit.Visit does exist in the jar >>>>> and the jar has read rights to every user (chmod 444). So I can not find >>>>> the reason. >>>>> >>>>> versions are: [cqlsh 6.0.0 | Cassandra 4.0.1 | CQL spec 3.4.5 | Native >>>>> protocol v5] >>>>> >>>>> Any help would be appreciated! >>>>> >>>>> Thanks! >>>>> >>>>> Sébastien. >>>>> >>>>