Can CompleteFTP use an ADFS server for SAML Single Sign-On authentication?
A user recently asked us if CompleteFTP's SAML feature is compatible with Microsoft's ADFS (Active Directory Federation Services - often also written as AD FS).
The answer is yes, but keep reading...

Firstly, in version 11.0.0, you'll get an error if you try to import raw IDP metadata directly from ADFS.  Version 11.1.0 should be able to handle it, but as I write this version 11.1.0 hasn't yet been released, so if you're on version 11.0.0, you'll need to download the metadata file, open it in a text editor, and remove the nodes with the following names: ds:Signature, RoleDescriptor, SPSSODescriptor.  Once you've done that you should be able to import it into CompleteFTP.

Secondly, you need to set the secure hash algorithm (advanced settings tab) to SHA1.

Thirdly, you need to tell ADFS which attribute it should send to CompleteFTP as the user-name.  To do this you have to create a claim rule with an incoming claim type of your choice (e.g. Windows account name), an Outgoing claim type of 'Name ID', an Outgoing name ID format of 'Unspecified' and Pass through all claim values selected.

For more information, please refer to [this Oracle blog post](https://blogs.oracle.com/blogbypuneeth/steps-to-configure-saml-sso-with-adfs-as-idp-and-weblogic-server-as-sp), keeping in mind that the step for configuring WebLogic doesn't apply to CompleteFTP.
you could use on-demand tls with local certs if you don’t know ahead of time which ip the request will come from:

tls internal {

on\_demand

}

[image]

[tls (caddyfile directive) - caddy documentation](https://caddyserver.com/docs/caddyfile/directives/tls)

caddy is a powerful, enterprise-ready, open source web server with automatic https writ… the problem has been solved.

i got in contact with our provider and they were able to apply the proper access to the folder for verification.

thank you for all of your help and patience. this thread can now be closed. Not currently, but there's an idea thread for it! Be sure to upvote it here: [Workspace to FTP](https://forums.adobe.com/ideas/10411) 




[View solution in original post](/t5/adobe-analytics-questions/export-workspace-csv-to-ftp/m-p/302396#M15303) yes, you can using a module.

you might have seen examples of module where a only a symbol is given, e.g. from the docs:

data = mx.sym.variable('data')

fc1 = mx.sym.fullyconnected(data, name='fc1', num\_hidden=128)

act1 = mx.sym.activation(fc1, name='relu1', act\_type="relu")

fc2 = mx.sym.fullyconn… Things are already in the discussion but difficult to comment on an upgrade to OpenAPI as of now and yes 'allOf' is supported with FDM. We are working on publishing a document for the supported constructs with FDM. The earlier document which you were referring to for 'allOf' was just for Adaptive forms based on Json schema and Not FDM .

Hope this helps with the query raised earlier.




[View solution in original post](/t5/adobe-experience-manager-forms/aem-forms-do-not-support-quot-oneof-quot-json-schema-property/m-p/258766#M4614) Dapper just wraps raw ADO.NET; raw ADO.NET doesn't offer a facility for this, therefore dapper does not. What you want is `SqlBulkCopy`. You could *also* use a table-valued-parameter, but this really feels like a `SqlBulkCopy` job.


In a pinch, you can *use* dapper here - `Execute` will unroll an `IEnumerable<T>` into a series of commands about `T` - but it will be lots of commands; and unless you explicitly enable async-pipelining, it will suffer from latency per-command (the pipelined mode avoids this, but it will still be n commands). But `SqlBulkCopy` will be *much* more efficient.


If the input data is an `IEnumerable<T>`, you might want to use `ObjectReader` from FastMember; for example:



```
IEnumerable<SomeType> data = ...
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
    bcp.DestinationTableName = "SomeTable";
    bcp.WriteToServer(reader);
}

``` A couple of notes to get started:



> 
> .apply(literal\_eval)
> 
> 
> 


Wouldn't this be better as `map`?



> 
> I then re-create the Dask DF:
> 
> 
> ddf = dd.from\_pandas(ddf\_out, npartitions=nCores)
> 
> 
> 


`ddf_out` was already a dask dataframe, I don't know why you had to do this.



> 
> The columns in result seem to match those in metadir.
> 
> 
> 


The value of `result.columns` is taken from the meta you provided, no computing happens until you ask for it (dask is lazy in most operations). Does the ValueError exception not provide further information?


Here is a full example



```
x = ({'F9_07_PZ_COMP_DIRECT': '0',
  'F9_07_PZ_DIRTRSTKEY_NAME': 'DEBRA MEALY',
  'F9_07_PZ_COMP_OTHER': '0',
  'F9_07_PZ_COMP_RELATED': '0',
  'F9_07_PZ_TITLE': 'CHAIR PERSON',
  'F9_07_PZ_AVE_HOURS_WEEK': '1.00',
  'F9_07_PC_TRUSTEE_INDIVIDUAL': 'X'},
 {'F9_07_PZ_COMP_DIRECT': '0',
  'F9_07_PZ_DIRTRSTKEY_NAME': 'HELEN GORDON',
  'F9_07_PZ_COMP_OTHER': '0',
  'F9_07_PZ_COMP_RELATED': '0',
  'F9_07_PZ_TITLE': 'VICE CHAIR',
  'F9_07_PZ_AVE_HOURS_WEEK': '1.00',
  'F9_07_PC_TRUSTEE_INDIVIDUAL': 'X'})
df = pd.DataFrame({'a': x})
d = dd.from_pandas(df, 1)
meta = pd.DataFrame(columns=['F9_07_PZ_COMP_DIRECT', 
       'F9_07_PZ_DIRTRSTKEY_NAME',
       'F9_07_PZ_COMP_OTHER', 'F9_07_PZ_COMP_RELATED', 'F9_07_PZ_TITLE',
       'F9_07_PZ_AVE_HOURS_WEEK', 'F9_07_PC_TRUSTEE_INDIVIDUAL'], dtype="O")
d.map_partitions(lambda df: df.a.apply(pd.Series), meta=meta).compute()

```

How did I know what `meta` to use? I applied the function to the pandas dataframe - you might use a small piece of the dataframe to do this.


Some additional notes:


* it is an anti-pattern to load the data with pandas, pass to dask workers and then gather the whole result back to a pandas (in memory) dataframe, you are very unlikely to see a speedup this way and may incur a lot of overhead. You are better off loading with something like `dd.read_csv`, and aggregating or writing with dask functions too. Only `compute()` on something that will be small or not return anything (because it involves writing the output). The official examples do not use from\_pandas.
* string and dict processing are python methods, and so hold the interpreter lock (GIL) of any python function: threads will not actually run in parallel. To get parallelism, you need to run in processes, which is most easily achieved using <https://docs.dask.org/en/latest/setup/single-distributed.html>
* the distributed scheduler also gives you access to the dashboard, which has a lot of useful information to diagnose how your system is running. You can also configure a lot about its behaviour, in case you have firewall rules you need to obey. Hi anil940,
  

  
Kindly check the below mentioned link to know the scope of support for password issues on this website: 
  

  
<https://ccm.net/faq/9201-why-ccm-doesn-t-recover-lost-passwords>
  

  
Check the below mentioned How-To link for the "MICRO SD card - Lost password" fix: 
  

  
<https://ccm.net/faq/4154-lost-password-to-microsd-card>
  

  
Do reply with results. Unfortunately, ColdFusion 2018 does not natively support v4 signing, which is required for regions added after September, 2014. Please request this feature on the [Adobe bug tracker](https://tracker.adobe.com/), and it may be addressed in a future release.You can use the AWS Java SDK, which has v4 signing built in. I'm writing [a series on using the AWS Java SDK from ColdFusion](https://brianklaas.net/), and there is an entry on [the basic steps you need to go through to use the AWS Java SDK from within CF.](https://brianklaas.net/aws/coldfusion/2018/05/21/Basic-Setup-Needed-To-Access-AWS-From-CFML.html) Magda, have you found what you need, yet?


I did this many years ago. It is simple… the 2nd time you do it!  

Exit points are simply “interrupts” that IBM supplies. You can attach programs to them, and the programs will automatically run at that point. For setting your AS/400 up to accept FTP logons, for example, the exit point is:  

QIBM\_QTMF\_SVR\_LOGON and the format you wil use is: TCPL0100.


A program inserted there can control WHO can log on, and when.  

To control WHAT they can do, you use another exit point, QIBM\_QTMF\_SERVER\_REQ and use format VLRQ0100.


My notes (from 1999) say I used the IBM TCP manual to get this info, specifically: TCP/IP manual SC41-5420-01 page I-14.


I do not know if it will allow me to post code here, it is long and complex due to the number of variables and some of them being in hex.


Write me (drow@waxie.com) if you would like me to email you my program code.


David Row  

WAXIE Sanitary Supply  

San Diego, CA





This is a link for [Add-ons for Firefox](https://addons.mozilla.org/en-US/firefox/). These are programs written by users or developers that the browser knows how and when to call. The developers of Firefox designed it to allow external programs to be hooked in by users of the browser.


IBM did something similar for a lot of the TCP/IP and other server functions. (And a lot of other things.) When you connect to the FTP server for example, the server checks to see if a program has been registered to process FTP logon requests. The registered program is an ‘exit program’.


Browser add-ons get an entry added to a file someplace within the browser directory structure. In your iSeries, the entry would be added to the Registration Facility. (Not always, but that’s the commonly recognized object for exit points and programs.) Use WRKREGINF to review your registration facility.


To create an exit program, you need to know the parameter list that will be passed to your program and the exit protocol. To find the parameter list, you should start looking at the documentation for the server the exit program will be associated with. The protocol, the meanings of the parms and what to with them, is also there.


A FTP exit program would be structured after documentation within the [File Transfer Protocol exit programs](http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/rzaiq/rzaiqreferenceexit.htm) topic of the Information Center for your release.


Once registered, a server logon exit program (for example) would be called just before the server decides whether or not to accept the logon. Your exit program directly influences that decision by returning an ‘accept or reject’ parameter. It chooses based on examination of the input parms.


The exit program may control who can and cannot logon, where they may logon from, what times of day logons are accepted, or it might accept all logons — its purpose can be simply to write all logons to a log file or to send a message when particular logons happen. Your exit program can do whatever it is programmed to do at that point in the logon process.


It doesn’t have to be a ‘security’ function. It’s whatever you want it to be.


For the FTP server, there are two general exit points. One is just before a logon is accepted. The other is just before each transaction in a session is processed. You can control individual transactions just as you can logons. (FTP client has its own exit points.)


Most other exit programs work on similar principles.


A few issues complicate things.


* An exit program needs enough authority to do whatever it needs to do; it can’t always rely on the authority of the session user.
* An exit program shouldn’t unduly delay transactions; there’s no way to know how often an exit program may be called, so you don’t want it slowing down every single transaction.
* Exit programs may be called by many instances of a server at the same time; it shouldn’t be locking things that are needed by a different instance.
* IBM changes the interfaces at times and the servers themselves can get PTFs; regular, on-going maintenance can be needed — keep the programs direct with little complication.
* There are other issues, but those are enough to consider.


Code a very simple exit program that accepts the parms and returns an ‘Accept’ indication. Don’t have it do anything except maybe send a message to a message queue. That lets you see how the registration facility works and how the parms work. It also gives you a program that you can register and deregister in the future to check whether or not the server is stilling calling your program correctly. (Problems can happen.)


Tom