Mailinglist Archive: yast-commit (1535 mails)

< Previous Next >
[yast-commit] <rest-service> eula : new plugin for Mail Settings (fate#307142)
  • From: Jiri Suchomel <jsuchome@xxxxxxx>
  • Date: Fri, 9 Oct 2009 10:11:22 +0200
  • Message-id: <E1MyRg4-0002jY-6Y@xxxxxxxxxxxxxxxx>
ref: refs/heads/eula
commit ef719072f72467b5850c651261d4434c040e5e01
Author: Jiri Suchomel <jsuchome@xxxxxxx>
Date: Fri Oct 9 10:11:22 2009 +0200

new plugin for Mail Settings (fate#307142)
(name do not have to be final...)
---
plugins/administrator/README | 4 +-
plugins/administrator/doc/README_FOR_APP | 4 +-
plugins/mail_settings/.gitignore | 4 +
plugins/mail_settings/MIT-LICENSE | 20 ++++
plugins/mail_settings/README | 7 ++
plugins/mail_settings/Rakefile | 11 ++
.../app/controllers/mail_settings_controller.rb | 36 +++++++
plugins/mail_settings/app/models/mail_settings.rb | 99 ++++++++++++++++++
plugins/mail_settings/config/rails_parent.rb | 15 +++
.../config/resources/mail_settings.yml | 3 +
plugins/mail_settings/doc/README_FOR_APP | 7 ++
plugins/mail_settings/doc/mail_proposal.txt | 44 ++++++++
plugins/mail_settings/package/MailSettings.pm | 48 +++++++++
....opensuse.yast.modules.yapi.mailsettings.policy | 29 ++++++
.../package/yast2-webservice-mailsettings.changes | 4 +
.../package/yast2-webservice-mailsettings.spec | 105 ++++++++++++++++++++
.../public/mail_settings/restdoc/.gitignore | 3 +
plugins/mail_settings/restdoc/api.txt | 3 +
plugins/mail_settings/test/test_helper.rb | 53 ++++++++++
plugins/mail_settings/uninstall.rb | 1 +
20 files changed, 496 insertions(+), 4 deletions(-)

diff --git a/plugins/administrator/README b/plugins/administrator/README
index 2c90b86..d08f11d 100644
--- a/plugins/administrator/README
+++ b/plugins/administrator/README
@@ -1,5 +1,5 @@
-System
-======
+Administrator
+============

REST interface for configuration of system administrator's attributes:

diff --git a/plugins/administrator/doc/README_FOR_APP
b/plugins/administrator/doc/README_FOR_APP
index 2c90b86..d08f11d 100644
--- a/plugins/administrator/doc/README_FOR_APP
+++ b/plugins/administrator/doc/README_FOR_APP
@@ -1,5 +1,5 @@
-System
-======
+Administrator
+============

REST interface for configuration of system administrator's attributes:

diff --git a/plugins/mail_settings/.gitignore b/plugins/mail_settings/.gitignore
new file mode 100644
index 0000000..f102b68
--- /dev/null
+++ b/plugins/mail_settings/.gitignore
@@ -0,0 +1,4 @@
+package-local
+package/www/
+package/www.tar.bz2
+coverage
diff --git a/plugins/mail_settings/MIT-LICENSE
b/plugins/mail_settings/MIT-LICENSE
new file mode 100644
index 0000000..658dd59
--- /dev/null
+++ b/plugins/mail_settings/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2009 Novell, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/plugins/mail_settings/README b/plugins/mail_settings/README
new file mode 100644
index 0000000..e57d6ee
--- /dev/null
+++ b/plugins/mail_settings/README
@@ -0,0 +1,7 @@
+Mail Settings
+=============
+
+REST interface for configuration of the SMTP server used for sending mails.
+
+
+Copyright (c) 2009 Novell, released under the MIT license
diff --git a/plugins/mail_settings/Rakefile b/plugins/mail_settings/Rakefile
new file mode 100644
index 0000000..2c69676
--- /dev/null
+++ b/plugins/mail_settings/Rakefile
@@ -0,0 +1,11 @@
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+require 'rake/packagetask'
+require File.join(File.dirname(__FILE__), 'config', 'rails_parent')
+require File.join(RailsParent.parent, 'config', 'boot')
+require 'tasks/rails'
+
+desc 'Default: run unit tests.'
+task :default => :test
+
diff --git a/plugins/mail_settings/app/controllers/mail_settings_controller.rb
b/plugins/mail_settings/app/controllers/mail_settings_controller.rb
new file mode 100644
index 0000000..d74f50e
--- /dev/null
+++ b/plugins/mail_settings/app/controllers/mail_settings_controller.rb
@@ -0,0 +1,36 @@
+# = Mail Settings controller
+# For configuration of which SMTP server use for sending mails
+class MailSettingsController < ApplicationController
+
+ before_filter :login_required
+
+ # GET action
+ # Read mail settings
+ # Requires read permissions for mail server YaPI.
+ def show
+ yapi_perm_check "mailsettings.read"
+
+ @mail = MailSettings.instance
+
+ respond_to do |format|
+ format.html { render :xml => @mail.to_xml(:root => "mail_settings"),
:location => "none" } #return xml only
+ format.xml { render :xml => @mail.to_xml(:root => "mail_settings",
:indent=>2), :location => "none" }
+ format.json { render :json => @mail.to_json, :location => "none" }
+ end
+ end
+
+ # PUT action
+ # Write mail settings
+ # Requires write permissions for mail server YaPI.
+ def update
+ yapi_perm_check "mailsettings.write"
+
+ @mail = MailSettings.instance
+ @mail.save(params["mail_settings"])
+ show
+ end
+
+ def create
+ update
+ end
+end
diff --git a/plugins/mail_settings/app/models/mail_settings.rb
b/plugins/mail_settings/app/models/mail_settings.rb
new file mode 100644
index 0000000..a831d49
--- /dev/null
+++ b/plugins/mail_settings/app/models/mail_settings.rb
@@ -0,0 +1,99 @@
+require 'singleton'
+require 'yast_service'
+
+# = MailSettings model
+# Proviceds access local mail settings (SMTP server to use)
+# Uses YaPI::MailSettings for read and write operations,
+# YaPI::SERVICES, for reloading postfix service.
+class MailSettings
+
+ attr_accessor :smtp_server
+ attr_accessor :user
+ attr_accessor :password
+ attr_accessor :transport_layer_security
+
+ include Singleton
+
+ def initialize
+ @password = ""
+ @user = ""
+ @smtp_server= ""
+ @transport_layer_security = "NONE"
+
+ yapi_ret = YastService.Call("YaPI::MailSettings::Read")
+ if yapi_ret.has_key? "SendingMail"
+ sending_mail = yapi_ret["SendingMail"]
+ if sending_mail.has_key? "RelayHost"
+ relay_host = sending_mail["RelayHost"]
+ @smtp_server = relay_host["Name"]
+ @user = relay_host["Account"]
+ end
+ @transport_layer_security = sending_mail["TLS"] if sending_mail.has_key?
"TLS"
+ end
+ end
+
+
+ # Save new mail settings
+ def save(settings)
+ if false # FIXME compare with current values... but do we know original
password?
+ Rails.logger.debug "nothing has been changed"
+ return true
+ end
+ parameters = {
+ "Changed" => [ "i", 1],
+ "SendingMail" => ["a{sv}", {
+ "Type" => [ "s", "relayhost"],
+ "TLS" => [ "s", @transport_layer_security],
+ "RelayHost" => [ "a{sv}", {
+ "Name" => [ "s", @smtp_server],
+ "Auth" => [ "i", @user == "" ? 0 : 1],
+ "Account" => [ "s", @user],
+ "Password"=> [ "s", @password]
+ }]
+ }]
+ }
+
+ yapi_ret = YastService.Call("YaPI::MailSettings::Write", parameters)
+ Rails.logger.debug "YaPI returns: '#{yapi_ret}'"
+ raise MailSettingsError.new(yapi_ret) unless yapi_ret.empty?
+ # FIXME restart postfix...
+ end
+
+ def to_xml( options = {} )
+ xml = options[:builder] ||= Builder::XmlMarkup.new(options)
+ xml.instruct! unless options[:skip_instruct]
+
+ xml.mail_settings do
+ xml.smtp_server smtp_server
+ xml.user user
+ xml.password password
+ xml.transport_layer_security transport_layer_security
+ end
+ end
+
+ def to_json( options = {} )
+ hash = Hash.from_xml(to_xml())
+ return hash.to_json
+ end
+
+end
+
+require 'exceptions'
+class MailSettingsError < BackendException
+
+ def initialize(message)
+ @message = message
+ super("Mail setup failed with this error: #{@message}.")
+ end
+
+ def to_xml
+ xml = Builder::XmlMarkup.new({})
+ xml.instruct!
+
+ xml.error do
+ xml.type "MAIL_SETTINGS_ERROR"
+ xml.description message
+ xml.output @message
+ end
+ end
+end
diff --git a/plugins/mail_settings/config/rails_parent.rb
b/plugins/mail_settings/config/rails_parent.rb
new file mode 100644
index 0000000..b869908
--- /dev/null
+++ b/plugins/mail_settings/config/rails_parent.rb
@@ -0,0 +1,15 @@
+class RailsParent
+
+ def RailsParent.parent
+ parent = ENV["RAILS_PARENT"]
+ unless parent
+ parent = File.expand_path(File.join('..','..','..', 'webservice'),
File.dirname(__FILE__))
+ unless File.directory?( parent || "" )
+ $stderr.puts "Nope: #{parent}\nPlease set RAILS_PARENT environment"
+ exit 1
+ end
+ end
+ parent
+ end
+
+end
diff --git a/plugins/mail_settings/config/resources/mail_settings.yml
b/plugins/mail_settings/config/resources/mail_settings.yml
new file mode 100644
index 0000000..5095d2c
--- /dev/null
+++ b/plugins/mail_settings/config/resources/mail_settings.yml
@@ -0,0 +1,3 @@
+interface: org.opensuse.yast.modules.yapi.mailsettings
+controller: mail_settings
+singular: true
diff --git a/plugins/mail_settings/doc/README_FOR_APP
b/plugins/mail_settings/doc/README_FOR_APP
new file mode 100644
index 0000000..e57d6ee
--- /dev/null
+++ b/plugins/mail_settings/doc/README_FOR_APP
@@ -0,0 +1,7 @@
+Mail Settings
+=============
+
+REST interface for configuration of the SMTP server used for sending mails.
+
+
+Copyright (c) 2009 Novell, released under the MIT license
diff --git a/plugins/mail_settings/doc/mail_proposal.txt
b/plugins/mail_settings/doc/mail_proposal.txt
new file mode 100644
index 0000000..0a26abb
--- /dev/null
+++ b/plugins/mail_settings/doc/mail_proposal.txt
@@ -0,0 +1,44 @@
+Mail server module proposal (fate #307142)
+---------------------------------------------
+
+Tasks:
+ - configure the SMTP server used for sending mails:
+ - smtp server address
+ - authentication fields
+
+Model
+
+ singleton class Mail
+
+ attributes
+ string smtp_server
+ string login
+ string password
+ string tls
+
+ access to the system:
+ YaPI::MailServer
+ YaPI::SERVICES
+
+
+Policies
+
+ org.opensuse.yast.modules.yapi.mail.read
+ org.opensuse.yast.modules.yapi.mail.write
+
+API
+
+ URL: /mail
+
+ REST service pseudo-code:
+
+ # GET method
+ def show
+
+ read and return current settings
+
+ # PUT method
+ def update (params)
+
+ save new settings: smtp server address and credentials
+ if there was a change, reload of postfix service is needed
diff --git a/plugins/mail_settings/package/MailSettings.pm
b/plugins/mail_settings/package/MailSettings.pm
new file mode 100644
index 0000000..89ffd1f
--- /dev/null
+++ b/plugins/mail_settings/package/MailSettings.pm
@@ -0,0 +1,48 @@
+# A wrapper to call YaPI::MailServer
+# Used to get more understandable function names, policies,
+# and to prevent returning nil values which cannot get through dbus.
+package YaPI::MailSettings;
+
+use strict;
+use ycp;
+#use YaST::YCP;
+use YaPI;
+use Data::Dumper;
+
+our %TYPEINFO;
+
+YaST::YCP::Import ("YaPI::MailServer");
+
+# wrapper for MailServer::ReadGlobalSettings
+BEGIN { $TYPEINFO{Read} =["function", ["map", "string", "any" ]]; }
+sub Read {
+
+ my $global_settings = YaPI::MailServer->ReadGlobalSettings ("");
+
+ # check for nil values...
+ while (my ($key, $value) = each %{$global_settings}) {
+ if (!defined $value) {
+ $global_settings->{$key} = "";
+ y2warning ("value for key $key not defined!");
+ }
+ }
+ return $global_settings;
+}
+
+# wrapper for MailServer::WriteGlobalSettings
+# returns value is error message
+BEGIN { $TYPEINFO{Write} =["function", "string", ["map", "string", "any" ]]; }
+sub Write {
+
+ my $self = shift;
+ my $settings = shift;
+ my $ret = "";
+
+ if (!defined YaPI::MailServer->WriteGlobalSettings ($settings, "")) {
+ my $error = YaPI->Error ();
+ $ret = $error->{'summary'} || "";
+ }
+ return $ret;
+}
+
+1;
diff --git
a/plugins/mail_settings/package/org.opensuse.yast.modules.yapi.mailsettings.policy

b/plugins/mail_settings/package/org.opensuse.yast.modules.yapi.mailsettings.policy
new file mode 100644
index 0000000..21da441
--- /dev/null
+++
b/plugins/mail_settings/package/org.opensuse.yast.modules.yapi.mailsettings.policy
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy
Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd";>
+
+<policyconfig>
+ <vendor>Novell, Inc.</vendor>
+ <vendor_url>http://www.novell.com</vendor_url>
+
+ <action id="org.opensuse.yast.modules.yapi.mailsettings.read">
+ <description>Read system mail settings</description>
+ <message>Authentication is required to read mail settings</message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>no</allow_active>
+ <allow_active>auth_admin_keep_session</allow_active>
+ </defaults>
+ </action>
+
+ <action id="org.opensuse.yast.modules.yapi.mailsettings.write">
+ <description>Update system mail settings</description>
+ <message>Authentication is required to update mail settings</message>
+ <defaults>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>no</allow_active>
+ <allow_active>auth_admin_keep_session</allow_active>
+ </defaults>
+ </action>
+</policyconfig>
+
diff --git
a/plugins/mail_settings/package/yast2-webservice-mailsettings.changes
b/plugins/mail_settings/package/yast2-webservice-mailsettings.changes
new file mode 100644
index 0000000..9199f49
--- /dev/null
+++ b/plugins/mail_settings/package/yast2-webservice-mailsettings.changes
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------
+Fri Oct 9 10:05:08 CEST 2009 - jsuchome@xxxxxxx
+
+- initial version (fate#307142)
diff --git a/plugins/mail_settings/package/yast2-webservice-mailsettings.spec
b/plugins/mail_settings/package/yast2-webservice-mailsettings.spec
new file mode 100644
index 0000000..7a14d3a
--- /dev/null
+++ b/plugins/mail_settings/package/yast2-webservice-mailsettings.spec
@@ -0,0 +1,105 @@
+#
+# spec file for package yast2-webservice-mailsettings
+#
+# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+
+Name: yast2-webservice-mailsettings
+PreReq: yast2-webservice
+Provides:
yast2-webservice:/srv/www/yastws/app/controllers/mail_settings_controller.rb
+License: MIT
+Group: Productivity/Networking/Web/Utilities
+Autoreqprov: on
+Version: 0.0.1
+Release: 0
+Summary: YaST2 - Webservice - Mail Settings
+Source: www.tar.bz2
+Source1: MailSettings.pm
+Source2: org.opensuse.yast.modules.yapi.mailsettings.policy
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+BuildArch: noarch
+BuildRequires: rubygem-yast2-webservice-tasks rubygem-restility
+
+# requires YaPI::USERS
+%if 0%{?suse_version} == 0 || %suse_version > 1110
+# 11.2 or newer
+Requires: yast2-mail-server >= 2.18.2
+%else
+# 11.1 or SLES11
+Requires: yast2-mail-server >= 2.17.3
+%endif
+
+#
+%define pkg_user yastws
+%define plugin_name mailsettings
+#
+
+
+%description
+YaST2 - Webservice - REST based interface for mail settings
+
+Authors:
+--------
+ Jiri Suchomel <jsuchome@xxxxxxxxxx>
+
+%prep
+%setup -q -n www
+
+%build
+# build restdoc documentation
+export RAILS_PARENT=/srv/www/yastws
+env LANG=en rake restdoc
+
+%install
+
+#
+# Install all web and frontend parts.
+#
+mkdir -p $RPM_BUILD_ROOT/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}
+cp -a * $RPM_BUILD_ROOT/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}
+
+# Policies
+mkdir -p $RPM_BUILD_ROOT/usr/share/PolicyKit/policy
+install -m 0644 %SOURCE1 $RPM_BUILD_ROOT/usr/share/PolicyKit/policy/
+
+# do not package restdoc sources
+rm -rf
$RPM_BUILD_ROOT/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/restdoc
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+# granting all permissions for the web user
+/etc/yastws/tools/policyKit-rights.rb --user root --action grant >& /dev/null
|| :
+/etc/yastws/tools/policyKit-rights.rb --user yastws --action grant >&
/dev/null || :
+
+%postun
+
+%files
+%defattr(-,root,root)
+%dir /srv/www/%{pkg_user}
+%dir /srv/www/%{pkg_user}/vendor
+%dir /srv/www/%{pkg_user}/vendor/plugins
+%dir /srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/MIT-LICENSE
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/README
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/Rakefile
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/init.rb
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/install.rb
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/uninstall.rb
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/app
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/config
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/doc
+/srv/www/%{pkg_user}/vendor/plugins/%{plugin_name}/public
+/usr/share/YaST2/modules/YaPI/MailSettings.pm
+%dir /usr/share/PolicyKit
+%dir /usr/share/PolicyKit/policy
+%attr(644,root,root) %config
/usr/share/PolicyKit/policy/org.opensuse.yast.modules.yapi.%{plugin_name}.policy
+
+
+%changelog
diff --git a/plugins/mail_settings/public/mail_settings/restdoc/.gitignore
b/plugins/mail_settings/public/mail_settings/restdoc/.gitignore
new file mode 100644
index 0000000..b66eeae
--- /dev/null
+++ b/plugins/mail_settings/public/mail_settings/restdoc/.gitignore
@@ -0,0 +1,3 @@
+index.html
+*.xml
+*.xsd
diff --git a/plugins/mail_settings/restdoc/api.txt
b/plugins/mail_settings/restdoc/api.txt
new file mode 100644
index 0000000..8dc5b3e
--- /dev/null
+++ b/plugins/mail_settings/restdoc/api.txt
@@ -0,0 +1,3 @@
+= YaST REST Service Documentation
+
+FIXME
diff --git a/plugins/mail_settings/test/test_helper.rb
b/plugins/mail_settings/test/test_helper.rb
new file mode 100644
index 0000000..f2b67f9
--- /dev/null
+++ b/plugins/mail_settings/test/test_helper.rb
@@ -0,0 +1,53 @@
+ENV["RAILS_ENV"] = "test"
+# find the rails parent
+require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent')
+# first config rails
+require File.expand_path( File.join("config","environment"),
RailsParent.parent )
+# then enable testing, this will get the routing right
+ENV["RAILS_ENV"] = "test"
+require 'test_help'
+
+class ActiveSupport::TestCase
+ # Transactional fixtures accelerate your tests by wrapping each test method
+ # in a transaction that's rolled back on completion. This ensures that the
+ # test database remains unchanged so your fixtures don't have to be reloaded
+ # between every test method. Fewer database queries means faster tests.
+ #
+ # Read Mike Clark's excellent walkthrough at
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
+ #
+ # Every Active Record database supports transactions except MyISAM tables
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
+ # is recommended.
+ #
+ # The only drawback to using transactional fixtures is when you actually
+ # need to test transactions. Since your test is bracketed by a transaction,
+ # any transactions started in your code will be automatically rolled back.
+ self.use_transactional_fixtures = true
+
+ # Instantiated fixtures are slow, but give you @david where otherwise you
+ # would need people(:david). If you don't want to migrate your existing
+ # test cases which use the @david style and don't mind the speed hit (each
+ # instantiated fixtures translates to a database query per test method),
+ # then set this back to true.
+ self.use_instantiated_fixtures = false
+
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in
alphabetical order.
+ #
+ # Note: You'll currently still have to declare fixtures explicitly in
integration tests
+ # -- they do not yet inherit this setting
+ fixtures :all
+
+ # Add more helper methods to be used by all tests here...
+
+ # See http://pennysmalls.com/2009/03/04/rails-23-breakage-and-fixage/
+ def clean_backtrace(&block)
+ yield
+ rescue ActiveSupport::TestCase::Assertion => error
+ framework_path =
Regexp.new(File.expand_path("#{File.dirname(__FILE__)}/assertions"))
+ error.backtrace.reject! { |line| File.expand_path(line) =~ framework_path }
+ raise
+ end
+
+end
diff --git a/plugins/mail_settings/uninstall.rb
b/plugins/mail_settings/uninstall.rb
new file mode 100644
index 0000000..9738333
--- /dev/null
+++ b/plugins/mail_settings/uninstall.rb
@@ -0,0 +1 @@
+# Uninstall hook code here
--
To unsubscribe, e-mail: yast-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: yast-commit+help@xxxxxxxxxxxx

< Previous Next >
This Thread
  • No further messages