# jCIFS Authentifizierungsprobleme an Hitachi NAS System



## schicks (12. Jan 2011)

Hallo,

ich nutze für ein Projekt die jCIFS Bibliothek in Version 1.3.15 von Samba. Ich kann mich bereits an jeder Windowsfreigabe authentifizieren. Nun ist es aber erforderlich, dass meine Software sich auch an einer Freigabe auf einem Hitachi NAS System authentifizieren kann. Die NAS befindet sich nicht in der Domain und verfügt über eingeschränkte IP-Zugriffe. Der Entwicklungscomputer ist jedoch freigeschaltet. Der Benutzer für die Authentifizierung ist ein lokaler Benutzer auf der NAS.

Mein Problem besteht darin, dass ich in Java immer den Fehler "*SmbAuthException: Logon failure: unknown user or bad password*" bekomme. Wenn mich mit dem Windows Explorer auf dem Entwicklungsrechner mit der Freigabe verbinde, dann funktioniert dies ohne Problem. Es kann also prinzipiell nicht, und ich wiederhole NICHT, an dem Benutzernamen und dem Password liegen. 

Hier der Beispielhafte Code:

```
String username = "user";
String password = "userpw";
NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", username, password);
String path = "smb://10.0.0.1/dir/";
SmbFile dir = new SmbFile(path,authentication);
```

Ich habe schon jede Konstellation des Benutzernamens (Rechner\Benutzername, Benutzername@Rechner) und auch das Angeben aller Logininformationen im Pfad versucht.
Ich habe auch schon den Transfer mit WhireShark mit geloggt. Dies ergab, dass der Server noch vor der Übermittlung von Benutzername und Passwort die Login Prozedur beendet hat. Der  SMB-Handshake zwischen Server und Client wurde aber komplett durchgeführt.   

Eine ewige Suche im Internet hat nichts gebracht und ich bin mit meinem Latein am Ende. Wäre schön, wenn jemand von euch eine Lösung hätte.

Gruß
Sebastian

P.S.
JAVA JDK: 1.6.0_21
jCIFS: 1.3.15
IDE : NetBeans 6.9.1


----------



## schicks (13. Jan 2011)

Hier noch eine ausführlichere Fehlerausgabe von dem internen jCIFS- Logger.


```
java.net.UnknownHostException
at jcifs.UniAddress.getAllByName(UniAddress.java:255)
at jcifs.UniAddress.getByName(UniAddress.java:245)
at jcifs.smb.Dfs.getTrustedDomains(Dfs.java:62)
at jcifs.smb.Dfs.resolve(Dfs.java:167)
at jcifs.smb.SmbFile.doConnect(SmbFile.java:897)
at jcifs.smb.SmbFile.connect(SmbFile.java:949)
at test.TestMain.main(TestMain.java:449)
doConnect: NAS.domain.loc/10.0.0.1
SmbComNegotiate[command=SMB_COM_NEGOTIATE,received=false,errorCode=0,flags=0x0018,flags2=0xC803,signSeq=0,tid=0,pid= 13776,uid=0,mid=1,wordCount=0,byteCount=12,wordCount=0,dialects=NT LM 0.12]
00000: FF 53 4D 42 72 00 00 00 00 18 03 C8 00 00 00 00 |ÿSMBr......È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 00 00 01 00 |..........Ð5....|
00020: 00 0C 00 02 4E 54 20 4C 4D 20 30 2E 31 32 00 |....NT LM 0.12. |

New data read: Transport1[NAS.domain.loc/10.0.0.1:445]
00000: FF 53 4D 42 72 00 00 00 00 88 01 C8 00 00 00 00 |ÿSMBr......È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 00 00 01 00 |..........Ð5....|

byteCount=58 but readBytesWireFormat returned 0
SmbComNegotiateResponse[command=SMB_COM_NEGOTIATE,received=false,errorCode=0,flags=0x0088,flags2=0xC801,signSeq=0,tid=0,pid= 13776,uid=0,mid=1,wordCount=17,byteCount=58,wordCount=17,dialectIndex=0,securityMode=0x3,security=us er,encryptedPasswords=true,maxMpxCount=50,maxNumberVcs=1,maxBufferSize=16644,maxRawSize=65536,sessio nKey=0x00002510,capabilities=0x8080E3FD,serverTime=Thu Jan 13 12:58:39 CET 2011,serverTimeZone=65476,encryptionKeyLength=58,byteCount=58,oemDomainName=]
00000: FF 53 4D 42 72 00 00 00 00 88 01 C8 00 00 00 00 |ÿSMBr......È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 00 00 01 00 |..........Ð5....|
00020: 11 00 00 03 32 00 01 00 04 41 00 00 00 00 01 |....2....A..... |

treeConnect: unc=\\NAS.domain.loc\dir,service=********?
sessionSetup: accountName=user,primaryDomain=
NtlmContext[auth=user,ntlmsspFlags=0x20080004,workstation=JCIFS199_53_12,isEstablished=false,state=1,serverChall enge=null,signingKey=null]
Type1Message[suppliedDomain=,suppliedWorkstation=JCIFS199_53_12,flags=0x20080205]
00000: 4E 54 4C 4D 53 53 50 00 01 00 00 00 05 22 08 20 |NTLMSSP......". |
00010: 00 00 00 00 00 00 00 00 0E 00 0E 00 20 00 00 00 |............ ...|
00020: 4A 43 49 46 53 31 39 39 5F 35 33 5F 31 32 |JCIFS199_53_12 |

SmbComSessionSetupAndX[command=SMB_COM_SESSION_SETUP_ANDX,received=false,errorCode=0,flags=0x0018,flags2=0xC803,signSeq=0,t id=0,pid=13776,uid=0,mid=2,wordCount=12,byteCount=79,andxCommand=0xFF,andxOffset=0,snd_buf_size=1664 4,maxMpxCount=10,VC_NUMBER=1,sessionKey=0,lmHash.length=0,ntHash.length=0,capabilities=-2147483564,accountName=null,primaryDomain=null,NATIVE_OS=Windows 7,NATIVE_LANMAN=jCIFS]
00000: FF 53 4D 42 73 00 00 00 00 18 03 C8 00 00 00 00 |ÿSMBs......È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 00 00 02 00 |..........Ð5....|
00020: 0C FF 00 DE DE 04 41 0A 00 01 00 00 00 00 00 2E |.ÿ.ÞÞ.A.........|
00030: 00 00 00 00 00 54 00 00 80 4F 00 4E 54 4C 4D 53 |.....T...O.NTLMS|
00040: 53 50 00 01 00 00 00 05 22 08 20 00 00 00 00 00 |SP......". .....|
00050: 00 00 00 0E 00 0E 00 20 00 00 00 4A 43 49 46 53 |....... ...JCIFS|
00060: 31 39 39 5F 35 33 5F 31 32 00 57 00 69 00 6E 00 |199_53_12.W.i.n.|
00070: 64 00 6F 00 77 00 73 00 20 00 37 00 00 00 6A 00 |d.o.w.s. .7...j.|
00080: 43 00 49 00 46 00 53 00 00 00 |C.I.F.S... |

New data read: Transport1[NAS.domain.loc/10.0.0.1:445]
00000: FF 53 4D 42 73 6D 00 00 C0 88 01 C8 00 00 00 00 |ÿSMBsm..À..È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 64 00 02 00 |..........Ð5d...|

SmbComSessionSetupAndXResponse[command=SMB_COM_SESSION_SETUP_ANDX,received=false,errorCode=Logon failure: unknown user name or bad password.,flags=0x0088,flags2=0xC801,signSeq=0,tid=0,pid=13776,uid=100,mid=2,wordCount=0,byteCount=0 ,andxCommand=0xFF,andxOffset=0,isLoggedInAsGuest=false,nativeOs=,nativeLanMan=,primaryDomain=]
00000: FF 53 4D 42 73 6D 00 00 C0 88 01 C8 00 00 00 00 |ÿSMBsm..À..È....|
00010: 00 00 00 00 00 00 00 00 00 00 D0 35 64 00 02 00 |..........Ð5d...|
00020: 00 00 00 |... |
```

Ich muss zugeben, dass ich daraus nicht schlau werde. Die Namensauflösung z.B. mit ping klappt ohne Probleme. Auch ein Eintrag in der hosts-Datei hat nichts gebracht.


----------



## Gelöschtes Mitglied 5909 (13. Jan 2011)

```
java.net.UnknownHostException
at jcifs.UniAddress.getAllByName(UniAddress.java:255)
at jcifs.UniAddress.getByName(UniAddress.java:245)
at jcifs.smb.Dfs.getTrustedDomains(Dfs.java:62)
at jcifs.smb.Dfs.resolve(Dfs.java:167)
at jcifs.smb.SmbFile.doConnect(SmbFile.java:897)
at jcifs.smb.SmbFile.connect(SmbFile.java:949)
at test.TestMain.main(TestMain.java:449)
doConnect: NAS.domain.loc/10.0.0.1
```

Thrown to indicate that the IP address of a host could not be determined.


----------



## schicks (18. Jan 2011)

Hi,

[EN]
this is not the problem! I can ping the server by name and ip.
The log shows, that java can also connect the server.

[DE]
das ist nicht das Problem. Ich kann den Server mit sowohl mit IP als auch mit Namen pingen.
Im Log kann man man sehen, dass Java den Server erreichen kann.


----------



## FArt (18. Jan 2011)

schicks hat gesagt.:


> Hi,
> 
> [EN]
> this is not the problem! I can ping the server by name and ip.
> ...



Da muss ich raiL aber Recht geben.
Aus dieser Umgebung heraus ist der Name nicht auflösbar. Mag sein, dass es in einer anderen Umgebung (Konsole, ...) funktioniert. Mag sein, dass es ein anderer Name ist als du denkst...?!? Und weil das eine Exception ist, könnte das wichtig sein...

... auf den ersten Blick würde ich sagen: doConnect: NAS.domain.loc/10.0.0.1
 sieht seltsam aus...der Slash und dann die IP...


----------



## schicks (18. Jan 2011)

@FArt
Der Name den ich verwende, welcher natürlich nicht der Selbe ist, den ich hier angebe, ist zu 100% richtig. Auch die hier genannte IP-Adresse entspricht natürlich nicht der realen. 

Beim Aufruf hat sich mittlerweile der Pfad so geändert:

```
String path = "smb://NAS.domain.loc/dir/";
```
Und im Log steht dies:
_doConnect: NAS.domain.loc/10.0.0.1_
Also muss ich doch davon ausgehen, dass der Name richtig aufgelöst werden kann, wenn die IP nirgendwo in meinem Code auftaucht. Woher soll er denn sonst die IP bekommen?

Warum der '/' bei doConnect steht kann ich dir leider nicht sagen. Da müsste man dann die Entwickler von jCIFS fragen, warum sie diese Ausgabe im Log machen.


----------



## schicks (24. Jan 2011)

Fehler gefunden! Die Samba-Implementierung auf der NAS konnte nicht mit ExtendedSecurity umgehen.
Ein

```
jcifs.Config.setProperty("jcifs.smb.client.useExtendedSecurity","false");
```
hat das Problem gelöst.


----------

