diff options
Diffstat (limited to 'source3/modules/vfs_smb_traffic_analyzer.c')
-rw-r--r-- | source3/modules/vfs_smb_traffic_analyzer.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/source3/modules/vfs_smb_traffic_analyzer.c b/source3/modules/vfs_smb_traffic_analyzer.c index e8aa385d69..ddce7e7dc5 100644 --- a/source3/modules/vfs_smb_traffic_analyzer.c +++ b/source3/modules/vfs_smb_traffic_analyzer.c @@ -174,7 +174,7 @@ static char *smb_traffic_analyzer_encrypt( TALLOC_CTX *ctx, char *output; unsigned char crypted[18]; if (akey == NULL) return NULL; - samba_AES_set_encrypt_key((unsigned char *) akey, 128, &key); + samba_AES_set_encrypt_key((const unsigned char *) akey, 128, &key); s1 = strlen(str) / 16; s2 = strlen(str) % 16; for (h = 0; h < s2; h++) *(filler+h)=*(str+(s1*16)+h); @@ -183,10 +183,10 @@ static char *smb_traffic_analyzer_encrypt( TALLOC_CTX *ctx, output = talloc_array(ctx, char, (s1*16)+17 ); d=0; for (h = 0; h < s1; h++) { - samba_AES_encrypt((unsigned char *) str+(16*h), crypted, &key); + samba_AES_encrypt((const unsigned char *) str+(16*h), crypted, &key); for (d = 0; d<16; d++) output[d+(16*h)]=crypted[d]; } - samba_AES_encrypt( (unsigned char *) str+(16*h), filler, &key ); + samba_AES_encrypt( (const unsigned char *) str+(16*h), filler, &key ); for (d = 0;d < 16; d++) output[d+(16*h)]=*(filler+d); *len = (s1*16)+16; return output; @@ -417,6 +417,17 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle, */ char state_flags[9] = "000000\0"; + /** + * The first byte of the state flag string represents + * the modules protocol subversion number, defined + * in smb_traffic_analyzer.h. smbtatools/smbtad are designed + * to handle not yet implemented protocol enhancements + * by ignoring them. By recognizing the SMBTA_SUBRELEASE + * smbtatools can tell the user to update the client + * software. + */ + state_flags[0] = SMBTA_SUBRELEASE; + SMB_VFS_HANDLE_GET_DATA(handle, rf_sock, struct refcounted_sock, return); if (rf_sock == NULL || rf_sock->sock == -1) { @@ -452,7 +463,7 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle, "protocol_version", NULL ); - if ( protocol_version == NULL || strcmp( protocol_version,"V1") == 0) { + if (protocol_version != NULL && strcmp(protocol_version,"V1") == 0) { struct rw_data *s_data = (struct rw_data *) data; @@ -489,7 +500,10 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle, return; } - } else if ( strcmp( protocol_version, "V2") == 0) { + } else { + /** + * Protocol 2 is used by default. + */ switch( vfs_operation ) { case vfs_id_open: ; @@ -557,10 +571,6 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle, return; } - } else { - DEBUG(1, ("smb_traffic_analyzer_send_data_socket: " - "error, unknown protocol given!\n")); - return; } if (!str) { @@ -656,7 +666,7 @@ static int smb_traffic_analyzer_connect(struct vfs_handle_struct *handle, rf_sock->ref_count++; } else { /* New connection. */ - rf_sock = TALLOC_ZERO_P(NULL, struct refcounted_sock); + rf_sock = talloc_zero(NULL, struct refcounted_sock); if (rf_sock == NULL) { SMB_VFS_NEXT_DISCONNECT(handle); errno = ENOMEM; |