Przesłane przez wydanie Samba 4.12.0, który kontynuował rozwój oddziału Samba 4 z pełną implementacją kontrolera domeny i usługą Active Directory, kompatybilną z implementacją Windows 2000 i zdolną do obsługi wszystkich wersji klientów Windows obsługiwanych przez Microsoft, w tym Windows 10. Samba 4 to wielofunkcyjny produkt serwerowy, który zapewnia również implementację serwer plików, usługa drukowania i serwer tożsamości (winbind).
Wbudowane implementacje funkcji kryptograficznych zostały usunięte z bazy kodu na rzecz wykorzystania bibliotek zewnętrznych. Zdecydowano się użyć GnuTLS jako głównej biblioteki kryptograficznej (wymagana jest co najmniej wersja 3.4.7). Oprócz ograniczenia potencjalnych zagrożeń związanych z identyfikacją podatności we wbudowanych implementacjach algorytmów kryptograficznych, przejście na GnuTLS pozwoliło także na znaczną poprawę wydajności podczas korzystania z szyfrowania w SMB3. Podczas testów z implementacją klienta CIFS z jądra Linux 5.3 zanotowano 3-krotny wzrost prędkości zapisu i 2.5-krotny wzrost prędkości odczytu.
Dodano nowy backend do wyszukiwania na partycjach SMB przy użyciu protokołu reflektoroparty na wyszukiwarce Elasticsearch (wcześniej backend był udostępniany w oparciu o Śledzenie GNOME). Do pakietu dodano także narzędzie „mdfind” z implementacją klienta, które umożliwia wysyłanie żądań wyszukiwania do dowolnego serwera SMB z uruchomioną usługą Spotlight RPC. Domyślna wartość ustawienia „backend reflektora” została zmieniona na „noindex” (w przypadku Trackera lub Elasticsearch należy jawnie ustawić wartości na „tracker” lub „elasticsearch”).
Zmieniono zachowanie operacji „net ads kerberos pac save” i „net eventlog eksport” w taki sposób, że nie zastępują one już pliku, ale zamiast tego wyświetlają błąd przy próbie eksportu do istniejącego pliku.
samba-tool poprawiło dodawanie wpisów kontaktów dla członków grupy. Jeśli wcześniej za pomocą polecenia „samba-tool group addmemers” można było po prostu dodawać użytkowników, grupy i komputery jako nowych członków grupy, teraz dostępna jest obsługa dodawania kontaktów jako członków grupy.
Narzędzie Samba umożliwia filtrowanie według jednostek organizacyjnych (OU, Jednostka organizacyjna) lub poddrzewa. Dodano nowe flagi „--base-dn” i „-member-base-dn”, dzięki którym możliwe jest wykonanie operacji tylko na określonej części drzewa Active Directory, np. tylko w obrębie jednej jednostki organizacyjnej.
Dodano nowy moduł VFS „io_uring” wykorzystujący nowy interfejs jądra Linuksa io_uring dla asynchronicznych wejść/wyjść. Io_uring obsługuje odpytywanie wejść/wyjść i może współpracować z buforowaniem (poprzednio proponowany mechanizm „aio” nie obsługiwał buforowanych wejść/wyjść). Podczas pracy z włączonym odpytywaniem wydajność io_uring znacznie przewyższa aio. Samba używa teraz io_uring do obsługi SMB_VFS_{PREAD,PWRITE,FSYNC}_SEND/RECV i zmniejsza obciążenie związane z utrzymaniem puli wątków w przestrzeni użytkownika podczas korzystania z domyślnego zaplecza VFS. Do zbudowania modułu VFS „io_uring” wymagana jest biblioteka lizanie i jądra Linuksa 5.1+.
VFS zapewnia możliwość określenia specjalnej wartości czasu UTIME_OMIT, aby zaznaczyć potrzebę ignorowania czasu w funkcji SMB_VFS_NTIMES().
W smb.conf zaprzestano obsługi parametru „rozmiar pamięci podręcznej zapisu”, który stracił znaczenie po wprowadzeniu obsługi io_uring.
Samba-DC i Kerberos nie obsługują już szyfrowania DES. Usunięto słaby kod kryptograficzny z Heimdal-DC.
Moduł vfs_netatalk został usunięty, pozostawiony bez konserwacji i nieaktualny.
Backend BIND9_FLATFILE jest przestarzały i zostanie usunięty w przyszłej wersji.
Biblioteka zlib jest dołączona jako zależność zestawu. Natywna implementacja zlib została usunięta z bazy kodu (kod został oparty na starszej wersji zlib, która nie obsługiwała poprawnie szyfrowania).
Wprowadzono fuzzingowe testy bazy kodu, m.in. w serwisie
oss-fuzz. Podczas testów fuzzingowych zidentyfikowano i skorygowano wiele błędów.
Zwiększono minimalne wymagania dotyczące wersji Pythona z Pythona
3.4 do Pythona 3.5. Możliwość zbudowania serwera plików przy użyciu języka Python 2 jest nadal zachowana (przed uruchomieniem ./configure i „make” należy ustawić zmienną środowiskową „PYTHON=python2”).