Sorry, I found that allow_insecure_udfs and allow_extra_insecure_udfs have been introduced in 4.0.2 but I run 4.0.1, so that explains the error. So for 4.0.1 "enable_user_defined_functions_threads: false" should be enough, no advance on that I still don't know why my UDF does not compile then
Le mer. 6 avr. 2022 à 15:52, Sébastien Rebecchi <srebec...@kameleoon.com> a écrit : > Hi Benjamin, Hi everybody, > > I found in the documentation that we should add "allow_insecure_udfs: > true" and optionally "allow_extra_insecure_udfs: true" so that > "enable_user_defined_functions_threads: false" is really taken into account > (I understood like that). That would explain why my UDF still does not run > even with "enable_user_defined_functions_threads: false". Found in > https://github.com/apache/cassandra/blob/cassandra-4.0/NEWS.txt > > So I tried to add "allow_insecure_udfs: true" and > "allow_extra_insecure_udfs: true" in cassandra.yaml, but then Cassandra > failed to restart and I got that error in logs "Exception > (org.apache.cassandra.exceptions.ConfigurationException) encountered during > startup: Invalid yaml. Please remove properties [allow_insecure_udfs, > allow_extra_insecure_udfs] from your cassandra.yaml". > > Should I understand that we can activate that 2 extra confs only by > changing source code? That would be really disappointing :( And if no, then > how to activate all UDF possibilities from cassandra.yaml please? > > Thanks in advance, > > Sébastien. > > > Le mar. 5 avr. 2022 à 10:36, Benjamin Lerer <ble...@apache.org> a écrit : > >> Unfortunately, I do not have much time for doing some digging. Sorry for >> that :-( >> You should look at JavaBasedUDFunction and UDFExecutorServic. >> >> Le lun. 4 avr. 2022 à 17:25, Sébastien Rebecchi <srebec...@kameleoon.com> >> a écrit : >> >>> Hi! >>> Do you have any more ideas for me? >>> Cordially, >>> Sébastien. >>> >>> Le lun. 28 mars 2022 à 16:39, Sébastien Rebecchi < >>> srebec...@kameleoon.com> a écrit : >>> >>>> Unfortunately, it is not working even with >>>> "enable_user_defined_functions_threads: false" in cassandra.yaml :/ >>>> Is there any way to check the running configuration? >>>> >>>> Le lun. 28 mars 2022 à 15:35, Benjamin Lerer <ble...@apache.org> a >>>> écrit : >>>> >>>>> 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. >>>>>>>>>> >>>>>>>>>