Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Remove license check from Subsonic 4.7
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/service/ b/subsonic-main/src/main/java/net/sourceforge/subsonic/service/
index f7031bf..39ee5b4 100644
--- a/subsonic-main/src/main/java/net/sourceforge/subsonic/service/
+++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/service/
@@ -620,14 +620,11 @@ public class SettingsService {
public boolean isLicenseValid() {
- return isLicenseValid(getLicenseEmail(), getLicenseCode()) && licenseValidated;
+ return true;
public boolean isLicenseValid(String email, String license) {
- if (email == null || license == null) {
- return false;
- }
- return license.equalsIgnoreCase(StringUtil.md5Hex(email.toLowerCase()));
+ return true;
public String getDownsamplingCommand() {
@@ -1223,33 +1220,7 @@ public class SettingsService {
private void validateLicense() {
- String email = getLicenseEmail();
- Date date = getLicenseDate();
- if (email == null || date == null) {
- licenseValidated = false;
- return;
- }
licenseValidated = true;
- HttpClient client = new DefaultHttpClient();
- HttpConnectionParams.setConnectionTimeout(client.getParams(), 120000);
- HttpConnectionParams.setSoTimeout(client.getParams(), 120000);
- HttpGet method = new HttpGet("" + "?email=" + StringUtil.urlEncode(email) +
- "&date=" + date.getTime() + "&version=" + versionService.getLocalVersion());
- try {
- ResponseHandler<String> responseHandler = new BasicResponseHandler();
- String content = client.execute(method, responseHandler);
- licenseValidated = content != null && content.contains("true");
- if (!licenseValidated) {
- LOG.warn("License key is not valid.");
- }
- } catch (Throwable x) {
- LOG.warn("Failed to validate license.", x);
- } finally {
- client.getConnectionManager().shutdown();
- }
public void validateLicenseAsync() {

This works if you can be assed into patching it yourself, if not, just add a
line to /etc/hosts
and then make a file on your local webserver (for the vhost if you're using them) called /backend/validateLicense.view with the content of 'true'.

Then activate it with a key of md5hex(email).

This way you can use the provided binaries.

Or you could be a nice person and donate.

fitzy89 commented Nov 20, 2012

Thanks for this ultramancool. I had donated but my license would not apply correctly, I couldn't wait for a response from the devs/forums so I implemented your solution in a slightly modified way.

In my case, Subsonic is hosted on a Windows Server which has IIS running on port 80 (hosting another app), this means subsonic needs to run on a different port (I used the default 4040). Subsonic expects the /backend/validateLicense.view file to be on a server on port 80. So, when creating your solution, it is necessary to modify the following:

  1. hosts file ( as you had done, on Windows, the location is "C:\Windows\System32\Drivers\Etc\hosts"
  2. In the default folder for IIS which is "C:\inetpub\wwwroot" create the folder called "backend"
  3. Within this folder, create the plain text file called "licenseValidate.view" and within it, just have the word "true"
  4. Go into the IIS admin console, drill down the config list on the left to "Default Web Site", click the "Handler Mappings" icon
  5. Click "Add Managed Handler" link in the right pane, set the Request Path to "*.view", set the type to "System.Web.DefaultHttpHandler" and give it any name you like.

These instructions are written for Windows Server 2012, I believe Server 2008 should be similar if not the same, other Windows servers may differ but I'm sure anyone setting up a Subsonic server can figure it out :)

f7n commented Jun 4, 2013

How do I patch this? Is it possible to patch it without root?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment