s3: Add OneFS alternate data streams implementation
[jra/samba/.git] / source3 / modules / vfs_smb_traffic_analyzer.c
index 9b4c1b3e25512c6f92b396ea80ce0bf526d50374..3ac5a4971b7cb5153ac9ffdbd0beeb30a380df01 100644 (file)
@@ -42,6 +42,7 @@ static enum sock_type smb_traffic_analyzer_connMode(vfs_handle_struct *handle)
        }
 }
 
+
 /* Connect to an internet socket */
 
 static int smb_traffic_analyzer_connect_inet_socket(vfs_handle_struct *handle,
@@ -77,6 +78,7 @@ static int smb_traffic_analyzer_connect_inet_socket(vfs_handle_struct *handle,
 
        for (res = ailist; res; res = res->ai_next) {
                struct sockaddr_storage ss;
+               NTSTATUS status;
 
                if (!res->ai_addr || res->ai_addrlen == 0) {
                        continue;
@@ -85,8 +87,8 @@ static int smb_traffic_analyzer_connect_inet_socket(vfs_handle_struct *handle,
                ZERO_STRUCT(ss);
                memcpy(&ss, res->ai_addr, res->ai_addrlen);
 
-               sockfd = open_socket_out(SOCK_STREAM, &ss, port, 10000);
-               if (sockfd != -1) {
+               status = open_socket_out(&ss, port, 10000, &sockfd);
+               if (NT_STATUS_IS_OK(status)) {
                        break;
                }
        }
@@ -122,6 +124,7 @@ static int smb_traffic_analyzer_connect_unix_socket(vfs_handle_struct *handle,
                DEBUG(1, ("smb_traffic_analyzer_connect_unix_socket: "
                        "Couldn't create socket, "
                        "make sure stad is running!\n"));
+               return -1;
        }
        remote.sun_family = AF_UNIX;
        strlcpy(remote.sun_path, name,
@@ -160,6 +163,8 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
        struct tm *tm = NULL;
        int seconds;
        char *str = NULL;
+       char *username = NULL;
+       const char *anon_prefix = NULL;
        size_t len;
 
        SMB_VFS_HANDLE_GET_DATA(handle, rf_sock, struct refcounted_sock, return);
@@ -178,11 +183,29 @@ static void smb_traffic_analyzer_send_data(vfs_handle_struct *handle,
        }
        seconds=(float) (tv.tv_usec / 1000);
 
+       /* check if anonymization is required */
+
+       anon_prefix=lp_parm_const_string(SNUM(handle->conn),"smb_traffic_analyzer",\
+                                       "anonymize_prefix", NULL );
+       if (anon_prefix!=NULL) {
+               username = talloc_asprintf(talloc_tos(),
+                       "%s%i",
+                       anon_prefix,
+                       str_checksum(
+                               handle->conn->server_info->sanitized_username ) ); 
+       } else {
+               username = handle->conn->server_info->sanitized_username;
+       }
+
+       if (!username) {
+               return;
+       }
+
        str = talloc_asprintf(talloc_tos(),
                        "V1,%u,\"%s\",\"%s\",\"%c\",\"%s\",\"%s\","
                        "\"%04d-%02d-%02d %02d:%02d:%02d.%03d\"\n",
                        (unsigned int)result,
-                       handle->conn->server_info->sanitized_username,
+                       username,
                        pdb_get_domain(handle->conn->server_info->sam_account),
                        Write ? 'W' : 'R',
                        handle->conn->connectpath,