[jcifs] Latest TODO and 0.9

Michael B Allen mba2000 at ioplex.com
Mon Mar 29 04:47:00 GMT 2004

I have reviewed all of the little issued that have popped up recently and
updated the docs/todo.txt file. I'll try to put a dent in this for 0.9. At
least I want to get all the bugs. Anything labeled DONE may not be in
0.8.2. They are likely changes and cleanups in my latest snapshot to be
released in 0.9.

Remember we're on the fast-track right now. After I pound out the bugs and
enough cleanup/refactoring in preparation for RPC work I will let things
settle and do a round of stability releases.

If you have submitted requests or reported problems to me and do not see
it in this list please reiterate on the mailing list.


Sun Mar 28 23:16:26 EST 2004

Copy over DST change and getParent update. DONE in 0.8.2.

Permit redundant transports to be opened triggered by the
jcifs.smb.client.ssnLimit property:

0 - unlimited
1 - only one session per transport
N - at most N sessions per transport
250 - at most 250 sessions per transport (default)

Insert getSession in NTLM filters to initialize JSESSIONID. Eric says:

"Slapping it right at the top of doFilter would definitely take care of
the problem.  It should be okay (and preferable) to put it right before
the challenge is sent instead (when we know that NTLM is involved):

if (msg.startsWith("NTLM ")) {
     byte[] challenge = SmbSession.getChallenge( dc );"

Implement WWW-Authenticate: Negotiate stub implementation in anticipation
of alternative authentication work (e.g. Kerberos via SPNEGO).

Support raw transport (default port 445).

Verify and fix remaining issues regarding setting timestamps on
directories (e.g. does copyTo properly set directory timestamps?).

Provide for an alternate WINS server.

Add the NetServerEnum3 RAP to retrieve more than one PDU of
information. See Gary Rambo's mod.

Fix for listFiles returning invalid smb://workgoup/server/ results. DONE.

Make SmbSession.logon resource configurable (default IPC$).

Investigate and fix DFS issues raised by Gary Rambo on March 16.

Refactor NetBIOS socket layer to permit access to the nbt header length
field. Use that to manage how much data is read form sockets. That will
eliminate the OS400 issue that popped up.

Fix premature signing behavior raised by Michael Kerley on March 19. See
comments from Eric on March 21 and Michael's capture's from the 22nd.

Switch to Eric's build.xml and enhance as necessary. DONE.

Switch to NT status codes. DONE.

Cleanup SmbException and places that use it such as permit
holding an inner exception like the Servlet API. See
SmbRandomAccessFile.writeUTF. DONE.

Add RAP status 59 "An unexpected network error occurred."

Change the NTLM HTTP code, NtlmPasswordAuthentication and SmbTransport so
that closing a transport invalidates any challenges. When this happends,
trying to use the NPA will throw an SmbAuthException. An NPA with an
invalid challenge should NEVER be used to access SMB resources (as it
does now). This is also key to getting DFS to work with NetworkExplorer
and Davenport.

Update the documentation.

Replace UCS2-LE encoding/decoding with custom fast methods. Implement the
changes in a way such that the language functions are not necessary. Test
the client with j2me (although after 5 minutes on java.sun.com I was
not able to find it).

Normalize encoding and decoding routines.

Remove NetBIOS socket layer and integrate NetBIOS header directly into

Add support for jcifs.netbios.wins2 property to specifiy secondary WINS
server. Also explore the failover of errant domain controllers if that is
related to the mechanism used for triggering the switch to the secondary
WINS server.

Simplify jcifs.util.Log and all logging throughout all classes. DONE.

Remove PropertiesTree and replace with vanilla
java.util.Properties. Change all properties to be initialized statically
when the class is loaded. Are there exceptions to this? DONE.

Test jcifs.smb.client.useUnicode=false with all servers.

Switch to using "Buffer.java" style (provided there is no copying)
like much of Eric's code.

Add more SMB URL support such as QUERY_STRING parameters.

Interesting note: If you run examples/TransactNamedPipe.java against
the IPC$/srvsvc it successfully echos the data (README.txt). Odd.

Create ResourceBundle with internationalized error messages.

Add a default workgroup for finding LMB/DMB in the absence of a master

Implement these other methods?

DONE createNewFile()
DONE list( FilenameFilter )
DONE listFiles( FilenameFilter )
DONE setLastModified()
DONE setCreateTime()
DONE setReadOnly()
DONE setReadWrite()
DONE setAttributes()
DONE mkdirs()
  listRoots() - doesn't apply really

Unicode, j9, and CodePage Support - Allow Unicode to be *completely*
turned off for use with micro VMs(also check to see if Unicode can be
enabled with j9). Allow an arbitrary encoding to be specified such that a
CodePage may be used to read strings. See Internationalization documents
here: http://java.sun.com/products/jdk/1.2/docs/guide/internat/index.html.

Improve SmbShell. Better yet, create an SmbShell api for writing efficient
browsers that for example return file names as they are returned by the
server rather than storing them in memory and returning them all at once.

Or just add functions that permit returning records records in stages:

int findFirst( SmbFile[] dst );
void findNext( int resumeKey, SmbFile dst );

or maybe

interface SmbFileLister {
	void list( SmbFile[] files, int count ) throws IOException;
void list( SmbFileLister lister );

Write DCE/RPC transactions for opererations such as NETLOGON
authentication for checking arbitrary domain\user and password
creadentials from perhaps a servlet or jsp etc. Netlogon and share
names longer than 13 characters are the two most compelling reasons to
implement this.

Correct for Unicode alignment in Trans2FindFirst2Response from NT with
useUnicode=no bug? This incongruentcey between MS servers and their
support for Unicode is the source of problems (e.g. the way short names
are returned in SMB_COM_TRANS2_FIND_FIRST2 responses from NT with Unicode
on/off. Is this still true?

Provide for testing to see if a file is "locked". Just try to send an
SMB_COM_NT_CREATE_ANDX with share access as FILE_NO_SHARE. This would
be trivial to add a boolen isLocked() method.

Write a CIFS server profileing/testing program or suite of programs that
can determine true capabilities of a server. Low priority and we don't
have enough functionality to really be usefull yet and it's a BIG job.

More information about the jcifs mailing list