Skip to content
/ magma Public
forked from lavabit/magma

The magma server daemon, classic edition, which supports server side encryption, SMTP, POP, IMAP and HTTP (with a JSON-RPC interface for the included webmail client).

License

Notifications You must be signed in to change notification settings

jaguar/magma

 
 

Repository files navigation

Description

Magma was originally designed and developed by Ladar Levison for lavabit.com. The current release is currently under heavy development, and some of the features and functions contained herein are unstable. The SMTP, POP, and IMAP protocol handlers are reasonably mature. The DMTP and HTTP (and the bundled webmail system) are still in development. Happy hacking.

Downloads

Magma Classic v6.0.1

https://darkmail.info/downloads/magma-classic-6.0.1.tar.gz
https://darkmail.info/downloads/magma-classic-6.0.1.tar.gz.sha256

d4c5b2d3e435eaae5a1c320cec5ec44db3818c67fe23819abcecab7d223e482e

Magma Development Machine, v1.0.0

The development machine is a pre-built virtual machine with a graphical desktop and various development tools, and dependencies installed.

https://darkmail.info/downloads/dark-mail-development-machine-1.0.0.tar.gz
https://darkmail.info/downloads/dark-mail-development-machine-1.0.0.tar.gz.sha256

33808e4ed81859cb076ae879fed7ad85164a2561a1b1cd96f66f65f7e3bf7bd7

Magma Build Machines, v0.0.8

For those looking for a slim virtual machine pre-configured to build and run magma, consider the following Vagrant boxes which have been created specifically for that purpose. Images have been created to support the VirtualBox, VMware, and libvirt providers. An official Docker image is on the roadmap, but for the time being you might want to consider one of the community supported images. Use the appropriate command below to download and provision a Vagrant instance.

# VMware
vagrant init lavabit/magma; vagrant up --provider vmware_desktop

# VirtualBox
vagrant init lavabit/magma; vagrant up --provider virtualbox

# libvirt
vagrant init lavabit/magma; vagrant up --provider libvirt

Or you can download the Vagrant box image manually.

https://darkmail.info/downloads/magma-centos-vmware.box
https://darkmail.info/downloads/magma-centos-vmware.box.sha256

847042e2b40b2be4abf01071b537d8ccb3dba596345f9a242023da3d13be7dac

https://darkmail.info/downloads/magma-centos-virtualbox.box
https://darkmail.info/downloads/magma-centos-virtualbox.box.sha256

fb917e12e44886a27192962f34cb836828ac8f8bec14f686abb5b1620663cefa

https://darkmail.info/downloads/magma-centos-libvirt.box
https://darkmail.info/downloads/magma-centos-libvirt.box.sha256

7c47d37113eb2dc2eb4f2c4d8c5317868b8d882317b139ebb76e20f3d4a366df

Credits

Ladar Levison
Greg Brown
Ivan Tolkachev
Princess Levison
Ryan Crites
Sean Benson
Stephen Watt

And the army of Kickstarter supporters who contributed to this project.

Tarball Contents

magma/
	check/
	dev/
		docs/
		scripts/
		tools/
			cryptex/
			mason/
			pwtool/
			rand/
			runner/
			stringer/
			testde/
	lib/
	res/
	sandbox/
	src/
	web/
	COPYRIGHT
	INSTALL
	LICENSE
	Makefile
	README.md

Installation Instructions

These instructions are targeted at systems running CentOS 6.

Prerequisites

List of packages to be installed: mysql-server, memcached, gettext-devel

MySQL

To install MySQL and configure the magma username run the commands below. The supplied password should be replaced with value unique to your environment. You may also want to limit the permissions of the magma database user to the database it will need to access. The global permission is only needed to setup the table schema.

yum install mysql-server
service mysqld start
chkconfig mysqld on

mysql -u root < echo "CREATE USER 'magma'@'localhost' IDENTIFIED BY 'volcano';"
mysql -u root < echo "GRANT ALL PRIVILEGES ON *.* TO 'magma'@'localhost' WITH GRANT;"

Memcached

To install Memcached run the commands below.

yum install memcached
service memcached start
chkconfig memcached on

Compiling

To link up the development and build scripts run the linkup.sh. This will create a bin folder in your home directory, if it doesn't already exist, and create symbolic links to the scripts and tools used to build, run and test magma. The commands below assume the bin directory is in your PATH. If it isn't, or you simply don't want to create the symbolic links, you can also run the shell scripts directly from their location in the dev/scripts folder. To execute the linkup.sh script:

magma/dev/scripts/linkup.sh

To build the dependencies and create the magmad.so library, run the build.lib script. Run the script without any parameters to see the possible command line options. To run all of the steps in a single operation:

build.lib all

Once the dependencies have been compiled the bundled Makefile can be used to compile magma. It points to the relevant folders created by the previous step when searching for the necessary header files. If the Makefile has trouble finding the necessary include files, odds are its because the previous step hasn't been run. To compile magmad and magmad.check:

build.magma
build.check

To configure a sandbox database which can be used to run the unit tests, or experiment with magma, run:

schema.reset

To launch the magma unit tests, or magma using the sandbox configuration, run:

check.run
magma.run

To download the ClamAV virus definitions into the sandbox environment, run:

freshen.clamav

Deploying

To deploy magma, run the INSTALL script. Note the script is slightly out of date, and may need to tweaking to operate perfectly against a copy of the current magma development branch cloned directly via git.

./INSTALL -d ~/ -u magma -p volcano -s Lavabit

Development

The best way to get an issue fixed is to create a pull request with a unit test added to the check folder which reproduces the issue and checks for the expected output. In general, please be sure to run the check.vg and magma.vg scripts before creating a pull request to make sure the newly submitted code doesn't introduce a memory leak, or invalid memory operation.

Webmail

Inside the res/pages/webmail directory is a compiled copy of the webmail code. Locate script.js file and change the magma.portalUrl = true variable to false, and it will use a set of hard coded test requests/responses. These hard coded requests, and responses are useful for checking/developing the webmail code without a running version of the magma server. Currently the files are configured to access the JSON-RPC interface using the hostname "localhost" and the HTTP port 10000. This should work using the default magma.config and magma.sandbox.config files.

The static files inside the res/pages/webmail folder are compiled using the files inside the web directory. See the web/WORKFLOW.md file for details.

About

The magma server daemon, classic edition, which supports server side encryption, SMTP, POP, IMAP and HTTP (with a JSON-RPC interface for the included webmail client).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 56.4%
  • C++ 34.8%
  • Makefile 5.1%
  • Shell 3.0%
  • M4 0.2%
  • Objective-C 0.2%
  • Other 0.3%