SoC/Ideas

Revision as of 22:42, 12 March 2010 by Bradh (talk | contribs) (Browsing support in Samba 4)

Google Summer of Code: Suggested Project ideas

The following are the Samba project ideas for Summer of Code. Of course you are free to come up with ideas not listed here. Please discuss the your planned project by either joining us on irc://irc.freenode.net/#samba-technical or by sending email to samba-technical@samba.org

Most of our projects will require C programming skills, but the Samba4 section has a couple of Python projects.

Samba 3

Add remote (RPC) support for Samba configuration

Since recently, Samba has a registry based configuration backend: Configuration data is stored inside the registry key HKEY_LOCAL_MACHINE\Software\Samba\smbconf. Access to this configuration is available through a module that makes use of the "reg_api" interface which is similar to the winreg API. This project would at first develop a common api for registry access local through reg_api and remote through the winreg rpc client code. This new module could be abstraced from the code of the utility "net rpc registry". With this new module, the registry configuration code could be enhanced to allow for remote configuration.

  • Difficulty: Medium
  • Language(s): C
  • Possible Mentors: Michael Adam


Remove use of unexpected.tdb

Current Samba 3 contains the unexpected.tdb as a mechanism to pass UDP packets coming in on ports 137 and 138 to interested client applications. This mechanism needs to be replaced by a unix domain socket on which nmbd offers a lightweight RPC interface to send and receive nmb name service packets and send and receive mailslot requests.

  • Difficulty: Hard
  • Language(s): C
  • Possible mentors: Volker Lendecke

Samba 4

LDAP Backend

These associated projects could be combined into one proposal, or taken on individually by others


Test OpenLDAP in a normal 'make test'

Detect that OpenLDAP 2.4.15 is present on the system, and it's location. If so, when 'make test' is run, then 'make quicktest' is additionally run against the LDAP backend.

This should help reduce bitrot in the OpenLDAP backend because it fails to be tested.

Currently testing against the OpenLDAP backend requires that you run:

TEST_LDAP=yes OPENLDAP_ROOT=/usr/local make test

Most developers don't do this regularly (either because they don't have the right OpenLDAP, or they don't know about it, or they don't think to).

  • Difficulty: Medium
  • Language(s): python
  • Possible mentors: Andrew Bartlett


Add correct indexes to OpenLDAP and Fedora DS

Currently the performance of Samba4 against the OpenLDAP backend isn't very good.

Part of this might be because we don't set up the correct indexes. I'm wondering if someone might like to modify Samba4's provision-backend system (see scripting/python/samba/provision.py:provision_backend()) to generate indexes in the same way it generates refint and memberof configuration.

This would replace the hard-coded indexes in setup/slapd.conf

We already generate the index for local ldb in source/dsdb/schema/schema_set.c:dsdb_schema_set_attributes(), but this is via an abstraction layer that is probably a bit painful to use in provision.py.

The flags are in the attribute searchFlags and the values are defined in source4/dsdb/common/flags.h (not sure if these are easily brought into python).

A bonus task would be to also enforce attribute uniqueness using the uniqneness overlay and in LDB.

  • Difficulty: Medium
  • Language(s): python, C for LDB unique indexes.
  • Possible mentors: Andrew Bartlett


Schema modification over LDAP

Ensure that all the details of schema modification over LDAP work. For example, if your set the mapiID attribute to a partiular OID value, then a new value is selected automatically. Similarly, the WSPP docs specify rules to generate an lDAPDisplayName if none is chosen.

The task is to implement all the required things so that Samba4 behaviour matches the WSPP documentation in this area.

  • Difficulty: Medium
  • Language(s): C
  • Possible mentors: Andrew Bartlett

Admin Utilities

We still need a few more Samba4-specific administration utilities to make Samba4 useful in real life. A Summer of Code student would be expected to do a number of these (identifying new needs from deployments), but here is a suggestion for one:


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. There is a LDB-based clone of it in Samba-Gtk. We would like to see this tool extended and e.g. having support for adding and editing entries.

Extension of the GTK+ frontends

There are a couple of GTK+ frontends for Samba4 (see SambaGtk). These are very limited at the moment but you could work on expanding them and further integrating them with GNOME. Language: C or Python

  • Difficulty: Easy
  • Language(s): Python, perhaps C
  • Possible mentors: JelmerVernooij


Windows Search Protocol WSP client library and torture tests

The Windows Search Protocol WSP 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 is a new protocol based on SMB named pipes \pipe\ci_skads or \pipe\MSFTEWDS. See http://msdn2.microsoft.com/en-us/library/cc216195.aspx.

The student should write a (un)marshalling library to push and pull PDUs and an async client library on top of the samba4 raw smb client library.

The student should write sub tests for smbtorture which should demostrate how the protocol works against a windows server.

The student doesn't have to implement the samba4 server code.

  • Difficulty: Medium
  • Language(s): C, (Python?)
  • Possible Mentors: Tridge



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. Documentation of the BROWSER protocol is available here: http://msdn.microsoft.com/en-us/library/cc201609(PROT.10).aspx http://ubiqx.org/cifs/Browsing.html

  • Difficulty: Hard
  • Language(s): C
  • Possible mentors: JelmerVernooij, Stefan Metzmacher

Complete net in Samba 4

Samba 4's net command still misses a lot of commands present in Samba 3. We would like to see it have the same functionality as Samba3's net.

  • Difficulty: Medium
  • Language(s): Python, perhaps some C
  • Possible mentors: JelmerVernooij


Provide setup / provision GUI for Samba (and OpenChange)

Setting up Samba and OpenChange currently requires running quite a lot of command line utilities. It should be easy for even a junior system administrator to set up Samba as a Domain Controller, RODC and general server.

The windows equivalent tool is dcpromo.exe, and while you may not want/need to copy it directly, it does provide a reasonable basis for establishing what this tool should be able to provide (in terms of outcomes).

Some initial work (using PyQt4) is available at http://gitorious.org/samba-openchange-gui-tools/samba-openchange-gui-setup but working with that is not essential to this task.

  • Difficulty: Easy
  • Language(s): Python
  • Possible mentors: Brad Hards, probably others.

Linux Kernel CIFS/SMB2 client improvements

Interested students should contact Steve French or Jeff Layton 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)

  • add ability for cifs to issue calls in parallel and handle read/write responses asynchronously
  • Language: C
  • Difficulty: Hard
  • Possible Mentors: Jeff Layton or Steve French

Create GUI or command-line tools for displaying /proc/fs/cifs statistics and and mount/session status

  • might also involve some cleanup of the in-kernel stats / status output
  • Language: some C (for kernel code), something else for GUI?
  • Difficulty: Easy
  • Possible Mentors: Steve French

Create a common uid mapping mechanism for Linux nfs and cifs vfs clients

  • or maybe just figure out a way to hook cifs up to rpc.idmapd
  • add a way for the client to remap the uids returned by the server to uids which would be valid on the client (or to a default if such uid does not exist).
  • This is helpful especially when the server supports the CIFS Unix Extensions and has different uids and gids mapping than the client
  • Difficulty: Hard
  • Possible Mentors: Jeff Layton or Steve French

VFS change notification support

  • add VFS support for calling into the filesystem when setting up notifications
  • add code to cifs/smb2 to set up and deal with notifications from the server in response to inotify/dnotify calls
  • Difficulty: Hard
  • Possible Mentors: Jeff Layton or Steve French

Integration of CIFS/SMB2 client with fscache

  • allows offline caching of files on the client
  • maybe also consider some disconnected operation
  • Difficulty: Hard
  • Possible Mentors: Jeff Layton or Steve French

Overhaul reconnection behavior

  • based on "serial numbers" rather than the complex flags that we have today
  • maybe also use sk_state_change callback from socket layer
  • Difficulty: Medium/Hard
  • Possible Mentors: Jeff Layton

Support for retrieving snapshots, encrypted files, or compressed files from Windows

  • Difficulty: Hard?
  • Possible Mentors: Steve French

cifs->Samba automated test facility

  • Do build verification similar to what we can now do with the Samba server and tools in the Samba build farm
  • Difficulty: Hard
  • Possible Mentors: Jeff Layton or Steve French

build infrastructure for storing NTLM creds in kernel keyring

  • so that the kernel can establish sessions on the fly without needing to prompt for passwords
  • Difficulty: Medium
  • Possible Mentors: Jeff Layton

Other Random Ideas

  • Ideas aren't limited to these, feel free to propose something else:
    • Prototype SMB2 client -- seems unfeasible for GSoC project
    • Create a GUI for creating and managing Linux cifs mounts, and more easily configuring the many complex cifs mount options -- doesn't seem very useful since it'll have to run as root. Will also quickly go out of date
    • Support for alternate transport protocols (other than TCP sockets) -- is there server support for this?
    • Support for features (such as directory delegations) which NFS version 4.1 has but which current CIFS even with the most current CIFS->Samba protocol extensions (CIFS Unix Extensions) do not have -- will probably need server support too.
  • Difficulty: Varies
  • Language(s): C
  • Possible mentors: Steve French