Google Summer of Code: Suggested Project ideas
Linux Kernel CIFS client improvements
Interested students should contact Steve French and discuss possible improvements to the Linux Kernel CIFS VFS client. Here are some ideas to get you started:
- improved async/vectored i/o support (improves performance) - CIFS->Samba DFS extensions - prototype SMB2 client - more generic uid mapping facility (when server supports Unix extensions but different uid space) - finish up of POSIX->NT ACL mapping - integration of cifs client with Dave Howell's fscache (for offline caching) - cifs->Samba automated test facility (build verification)
FRS: File Replication Service
The protocol used for the File Replication Service in Active Directory is not currently understood.
This project would be to document this protocol, and implement a working client as part of our torture suite. An ambitious student could try and implement a server as well, but getting the client done would be enough of a challenge for a SOC project. This project would suit someone who is interested in delving into the intricacies of protocol analysis.
ci-skads decoding and implementation
The ci-skads protocol is used to implement remote full filesystem indexing (indexed search) between windows machines. We would like to support this functionality in Samba, interfacing with existing indexing tools on Unix systems (such as beagle). This would be a very challenging project, suitable for someone experienced with analyzing completely new protocols.
Static and dynamic code analysis
We regularly use tools such as the IBM Checker, and Valgrind to work over our codebase.
These produce many warnings, and in particular the IBM Checker has found many 'unfixed' issues in the code base. Many are false positives, but many are also very serious issues. Students will need to work with the team and the upstream developers to resolve as many of these as possible. To see the current IBM Checker output look at the build farm output for the host 'snab' at http://build.samba.org/
Windows GUI Testing
Last year we had a very successful summer of code project which added automated windows testing to Samba. This tested only command line tools. We would not like to expand this to include testing of GUI applications.
The current test infrastructure in Samba3 and Samba4 only starts one copy of smbd.
Many aspects of Samba cannot be properly tested with just a single smbd. For example, we would like to test NBT browse membership, WINS interactions and domain member support. To make this happen requires some significant changes to our test infrastructure, and perhaps extensions to out socket wrapper virtual network testing code.
Samba includes a number of very useful general purpose libraries, in particular talloc, tdb and ldb. We would love to see these libraries packaged properly, so this project would suit someone who likes working with building good packages and pushing them into distros.
Wireshard PIDL expansion
Wireshark (nee Ethereal) uses PIDL to generate dissectors. However to create the best output, our IDL needs annotation and correction.
We also need to do the work to decode more RPC pipes with PIDL, rather than with the hand-written decoder. The problem is, the hand-written code currently produces nicer, and more user friendly output. This project will involve adding IDL extensions to support the necessary annotation inside the IDL file, and modifications to the pidl IDL compiler to produce wireshark modules from IDL which take advantage of these extensions.
Samba4 Domain Member support
Samba4 needs various bits of work, to become a useful domain member: Students may wish to take on some or all of the tasks below
- Create a Samba3 compatible IDMAP implementation in Samba4
- Implement user and group enumeration for nss_winbindd is Samba4
- Implement Kerberos handling in Samba4
- Research and improve other aspects of domain member support
Currently, Samba4 uses a module known as 'kludge_acls' to perform some basic access control on Samba4's database. This is highly inflexible, and needs to be replaced with real NT ACLs on the elements.
CIFS POSIX extensions in Samba4
Samba4 does not implement the CIFS POSIX extensions at this stage.
A testsuite needs to be written, to prove consistent behavior, and the Samba3 compatible server implemented.
SACL VFS Module (Samba 3)
Support for file systems SACLs (i.e. file system auditing) on in Samba in a VFS module by utilizing Extended Attributes. This project should ensure that users are able to successfully view and modify auditing settings on files and directories using the Windows Explorer.
Consolidate internal LDAP SASL support (Samba 3)
Samba has two separate copies of LDAP support routines. One is used to access Active Directories servers when operating as a member server and the other is used for implementing the LDAP passdb backend feature. Applicants should be comfortable with LDAP directories services and SASL mechanisms such as GSS-SPNEGO.
Backport EndPointMapper and support for ncacn_ip_tcp (Samba 3)
Current Samba 3.0 releases only support MS-RPC over SMB named pipes. The SAMBA_4_0 code base has support RPC directory over TCP which could be back ported in some degree to the SAMBA_3_0 tree.
A pre-requisite task may be to backport the events framework first
Alternative configuration backends (Samba 3)
The current smb.conf does not allow the flexible set read and modify individual key/value pairs from within smbd. This project would explore using a registry like backend that would allow more flexibility is managing Samba's configuration settings outside on a simple text editor. The LibElektra project provides a common configuration library with storage plugins. One possibility would be to implement an LDB backend along with a simple command line interpreter/editor.
The interaction between this and the registry shares in Samba3 should be carefully considered.
Full SAM implementation (Samba 3)
Provide a new database passdb backend that provides both the Unix and Win32 attributes without the use of external commands such as the "add user script".
This could be based around LDB, perhaps with the Samba4/AD layout.
SNMP support (Samba 3)
(does anyone still care about this?)
Explore supporting the LANMAN SNMP MIB included with Windows server operating systems in smbd, nmbd, and winbindd.
Solve the overabundance of configuration parameters (Samba 3)
(warning: long gloves required?)
Samba 3.0 includes many config options which are necessary only in extreme circumstances. Only a small percentage of the parameters are required in most installations. The challenge is to remove the more advanced settings from immediate misuse while still providing access to them when absolutely necessary.
Implement a Berkeley DB backend for LDB
(less important now we have transactions in tdb?)
LDB currently supports both TDB and LDAP backend storage mechanisms. Another alternative backend possibility is the Berkeley DB database.
Develop an Administrative Logging System (Samba 3)
The log files in Samba are commonly of more use to developers than to administrators. A new logging system (in parallel with the existing debug logs) similar to the Windows auditing facilities would record those specific events of concern to sysadmins. This support would include auditing for printers, users & groups, configuration changes, etc...
Dbench and Nbench workload generator based on Samba 4
Samba 4 has two NTVFS backends (cifs and nbench) which allow to create a CIFS proxy which:
1. intercepts CIFS traffic and forwards that to a remote server, and 2. write down a workload scenario file for Nbench and Dbench tools
For every connection there is one log file is written. These logs can later be replayed by nbench/dbench against any file system/server to reproduce the same workload. Implementation of the following things will allow to create a specialized workload generator to test various usage scenarios based on real world applications:
1. Add a functionality to post-process generated logs to create a combined dbench/nbench scenario representing multiple-client access pattern. 2. Add CIFS Posix Extensions support to both Nbench NTVFS backend and dbench/nbench tools so that Linux applications running against Linux CIFS file system could be profiled. 3. Package resulting solution as simply-installable and configurable application similar to Samba4WINS package
Subversion VFS Module (Samba 3)
Given a share that is also a Subversion working copy, provide a VFS module that performs the svn action corresponding to the file system action. For example, if a file is added from a Windows client, an "svn add" is done by the VFS module (note: not the command itself, but the equivalent SVN api call.) When (and if) to commit and what message to attach could be configurable options.
Re-implement smbclient in ejs (Samba 4)
GQ replacement using GTK and LDB
GQ is a widely used LDAP query tool. Many LDAP administrators would benefit if a similar tool were constructed, in particular with similar schema knowledge. Using LDB as a backend could allow easy use of Samba-supported SASL mechanisms for easier authentication. Likewise, an LDB editor in SWAT would be very useful. Building it with interactive functionality would make it a very powerful way to manage Samba4's LDB databases.
Convert more of the Samba 4 IDL to be used in Samba 3
3.0.26 will start using more autogenerated DCE/RPC pull/push functions. At the moment, winreg and wkssvc have been converted. The following interfaces still have to be converted (and would ideally also have the related tests from Samba 4 pass against them):
* svcctl * ds * eventlog * lsa * ntsvcs * samr * spoolss (not really feasible at this point, as samba4's idl is incomplete)
Browsing support in Samba 4
Samba 4 still needs support for mailslots in general and in particular for the BROWSE mailslot. Should come with tests.