Revision: 12783
http://freenas.svn.sourceforge.net/freenas/?rev=12783&view=rev
Author: zippybr
Date: 2012-11-27 12:57:13 +0000 (Tue, 27 Nov 2012)
Log Message:
-----------
Add support for SFTP log level/facility in GUI
Modified Paths:
--------------
trunk/gui/choices.py
trunk/gui/services/models.py
trunk/nanobsd/Files/etc/rc.d/ix-sshd
Added Paths:
-----------
trunk/gui/services/migrations/0077_auto__add_field_ssh_ssh_sftp_log_level__add_field_ssh_ssh_sftp_log_fac.py
Modified: trunk/gui/choices.py
===================================================================
--- trunk/gui/choices.py 2012-11-25 10:00:29 UTC (rev 12782)
+++ trunk/gui/choices.py 2012-11-27 12:57:13 UTC (rev 12783)
@@ -615,3 +615,30 @@
_all = re.findall(r'^(?P<name>[^#\s]+?)\.kbd:en:(?P<desc>.+)$', d, re.M)
for name, desc in _all:
yield name, desc
+
+
+SFTP_LOG_LEVEL = (
+ ('QUIET', _('Quiet')),
+ ('FATAL', _('Fatal')),
+ ('ERROR', _('Error')),
+ ('INFO', _('Info')),
+ ('VERBOSE', _('Verbose')),
+ ('DEBUG', _('Debug')),
+ ('DEBUG2', _('Debug2')),
+ ('DEBUG3', _('Debug3')),
+ )
+
+
+SFTP_LOG_FACILITY = (
+ ('DAEMON', _('Daemon')),
+ ('USER', _('User')),
+ ('AUTH', _('Auth')),
+ ('LOCAL0', _('Local 0')),
+ ('LOCAL1', _('Local 1')),
+ ('LOCAL2', _('Local 2')),
+ ('LOCAL3', _('Local 3')),
+ ('LOCAL4', _('Local 4')),
+ ('LOCAL5', _('Local 5')),
+ ('LOCAL6', _('Local 6')),
+ ('LOCAL7', _('Local 7')),
+ )
Added: trunk/gui/services/migrations/0077_auto__add_field_ssh_ssh_sftp_log_level__add_field_ssh_ssh_sftp_log_fac.py
===================================================================
--- trunk/gui/services/migrations/0077_auto__add_field_ssh_ssh_sftp_log_level__add_field_ssh_ssh_sftp_log_fac.py (rev 0)
+++ trunk/gui/services/migrations/0077_auto__add_field_ssh_ssh_sftp_log_level__add_field_ssh_ssh_sftp_log_fac.py 2012-11-27 12:57:13 UTC (rev 12783)
@@ -0,0 +1,347 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SSH.ssh_sftp_log_level'
+ db.add_column('services_ssh', 'ssh_sftp_log_level',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=20, blank=True),
+ keep_default=False)
+
+ # Adding field 'SSH.ssh_sftp_log_facility'
+ db.add_column('services_ssh', 'ssh_sftp_log_facility',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=20, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SSH.ssh_sftp_log_level'
+ db.delete_column('services_ssh', 'ssh_sftp_log_level')
+
+ # Deleting field 'SSH.ssh_sftp_log_facility'
+ db.delete_column('services_ssh', 'ssh_sftp_log_facility')
+
+
+ models = {
+ 'services.activedirectory': {
+ 'Meta': {'object_name': 'ActiveDirectory'},
+ 'ad_adminname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_adminpw': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_allow_trusted_doms': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ad_domainname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_netbiosname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_unix_extensions': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ad_use_default_domain': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'ad_verbose_logging': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ad_workgroup': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'services.afp': {
+ 'Meta': {'object_name': 'AFP'},
+ 'afp_srv_connections_limit': ('django.db.models.fields.IntegerField', [], {'default': '50', 'max_length': '120'}),
+ 'afp_srv_guest': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'afp_srv_guest_user': ('freenasUI.freeadmin.models.UserField', [], {'default': "'nobody'", 'max_length': '120'}),
+ 'afp_srv_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'services.cifs': {
+ 'Meta': {'object_name': 'CIFS'},
+ 'cifs_srv_aio_enable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_aio_rs': ('django.db.models.fields.IntegerField', [], {'default': '4096', 'max_length': '120'}),
+ 'cifs_srv_aio_ws': ('django.db.models.fields.IntegerField', [], {'default': '4096', 'max_length': '120'}),
+ 'cifs_srv_authmodel': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+ 'cifs_srv_description': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'cifs_srv_dirmask': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'cifs_srv_dosattr': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_doscharset': ('django.db.models.fields.CharField', [], {'default': "'CP437'", 'max_length': '120'}),
+ 'cifs_srv_easupport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_filemask': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'cifs_srv_guest': ('freenasUI.freeadmin.models.UserField', [], {'default': "'nobody'", 'max_length': '120'}),
+ 'cifs_srv_homedir': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'cifs_srv_homedir_aux': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'cifs_srv_homedir_browseable_enable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_homedir_enable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_hostlookup': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'cifs_srv_largerw': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_localmaster': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_loglevel': ('django.db.models.fields.CharField', [], {'default': "'1'", 'max_length': '120'}),
+ 'cifs_srv_netbiosname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'cifs_srv_nullpw': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_sendfile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_smb_options': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'cifs_srv_timeserver': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_unixcharset': ('django.db.models.fields.CharField', [], {'default': "'UTF-8'", 'max_length': '120'}),
+ 'cifs_srv_unixext': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'cifs_srv_workgroup': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'cifs_srv_zeroconf': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'services.dynamicdns': {
+ 'Meta': {'object_name': 'DynamicDNS'},
+ 'ddns_domain': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ddns_fupdateperiod': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ddns_options': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'ddns_password': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ddns_provider': ('django.db.models.fields.CharField', [], {'default': "'dyndns'", 'max_length': '120', 'blank': 'True'}),
+ 'ddns_updateperiod': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ddns_username': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'services.ftp': {
+ 'Meta': {'object_name': 'FTP'},
+ 'ftp_anonpath': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'ftp_anonuserbw': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_anonuserdlbw': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_banner': ('django.db.models.fields.TextField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ftp_clients': ('django.db.models.fields.PositiveIntegerField', [], {'default': '32'}),
+ 'ftp_defaultroot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_dirmask': ('django.db.models.fields.CharField', [], {'default': "'077'", 'max_length': '3'}),
+ 'ftp_filemask': ('django.db.models.fields.CharField', [], {'default': "'077'", 'max_length': '3'}),
+ 'ftp_fxp': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_ident': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_ipconnections': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_localuserbw': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_localuserdlbw': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_loginattempt': ('django.db.models.fields.PositiveIntegerField', [], {'default': '3'}),
+ 'ftp_masqaddress': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ftp_onlyanonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_onlylocal': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_options': ('django.db.models.fields.TextField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ftp_passiveportsmax': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_passiveportsmin': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'ftp_port': ('django.db.models.fields.PositiveIntegerField', [], {'default': '21'}),
+ 'ftp_resume': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_reversedns': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_rootlogin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_ssltls': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ftp_ssltls_certfile': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'ftp_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '120'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'services.iscsitarget': {
+ 'Meta': {'object_name': 'iSCSITarget'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_alias': ('django.db.models.fields.CharField', [], {'max_length': '120', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_target_authgroup': ('django.db.models.fields.IntegerField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_target_authtype': ('django.db.models.fields.CharField', [], {'default': "'Auto'", 'max_length': '120'}),
+ 'iscsi_target_flags': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '120'}),
+ 'iscsi_target_initialdigest': ('django.db.models.fields.CharField', [], {'default': "'Auto'", 'max_length': '120'}),
+ 'iscsi_target_initiatorgroup': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['services.iSCSITargetAuthorizedInitiator']"}),
+ 'iscsi_target_logical_blocksize': ('django.db.models.fields.IntegerField', [], {'default': '512', 'max_length': '3'}),
+ 'iscsi_target_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '120'}),
+ 'iscsi_target_portalgroup': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['services.iSCSITargetPortal']"}),
+ 'iscsi_target_queue_depth': ('django.db.models.fields.IntegerField', [], {'default': '32', 'max_length': '3'}),
+ 'iscsi_target_serial': ('django.db.models.fields.CharField', [], {'default': "'10000001'", 'max_length': '16'}),
+ 'iscsi_target_type': ('django.db.models.fields.CharField', [], {'default': "'Disk'", 'max_length': '120'})
+ },
+ 'services.iscsitargetauthcredential': {
+ 'Meta': {'object_name': 'iSCSITargetAuthCredential'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_auth_peersecret': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'iscsi_target_auth_peeruser': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'iscsi_target_auth_secret': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'iscsi_target_auth_tag': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'iscsi_target_auth_user': ('django.db.models.fields.CharField', [], {'max_length': '120'})
+ },
+ 'services.iscsitargetauthorizedinitiator': {
+ 'Meta': {'object_name': 'iSCSITargetAuthorizedInitiator'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_initiator_auth_network': ('django.db.models.fields.TextField', [], {'default': "'ALL'", 'max_length': '2048'}),
+ 'iscsi_target_initiator_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'iscsi_target_initiator_initiators': ('django.db.models.fields.TextField', [], {'default': "'ALL'", 'max_length': '2048'}),
+ 'iscsi_target_initiator_tag': ('django.db.models.fields.IntegerField', [], {'default': '1', 'unique': 'True'})
+ },
+ 'services.iscsitargetextent': {
+ 'Meta': {'ordering': "['iscsi_target_extent_name']", 'object_name': 'iSCSITargetExtent'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_extent_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'iscsi_target_extent_filesize': ('django.db.models.fields.CharField', [], {'default': '0', 'max_length': '120'}),
+ 'iscsi_target_extent_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '120'}),
+ 'iscsi_target_extent_path': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'iscsi_target_extent_type': ('django.db.models.fields.CharField', [], {'max_length': '120'})
+ },
+ 'services.iscsitargetglobalconfiguration': {
+ 'Meta': {'object_name': 'iSCSITargetGlobalConfiguration'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_basename': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'iscsi_defaultt2r': ('django.db.models.fields.IntegerField', [], {'default': '60', 'max_length': '120'}),
+ 'iscsi_defaultt2w': ('django.db.models.fields.IntegerField', [], {'default': '2', 'max_length': '120'}),
+ 'iscsi_discoveryauthgroup': ('django.db.models.fields.IntegerField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_discoveryauthmethod': ('django.db.models.fields.CharField', [], {'default': "'Auto'", 'max_length': '120'}),
+ 'iscsi_firstburst': ('django.db.models.fields.IntegerField', [], {'default': '65536', 'max_length': '120'}),
+ 'iscsi_iotimeout': ('django.db.models.fields.IntegerField', [], {'default': '30', 'max_length': '120'}),
+ 'iscsi_luc_authgroup': ('django.db.models.fields.IntegerField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_luc_authmethod': ('django.db.models.fields.CharField', [], {'default': "'chap'", 'max_length': '120', 'blank': 'True'}),
+ 'iscsi_luc_authnetwork': ('django.db.models.fields.CharField', [], {'default': "'127.0.0.0/8'", 'max_length': '120', 'blank': 'True'}),
+ 'iscsi_lucip': ('django.db.models.fields.IPAddressField', [], {'default': "'127.0.0.1'", 'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_lucport': ('django.db.models.fields.IntegerField', [], {'default': '3261', 'null': 'True', 'blank': 'True'}),
+ 'iscsi_maxburst': ('django.db.models.fields.IntegerField', [], {'default': '262144', 'max_length': '120'}),
+ 'iscsi_maxconnect': ('django.db.models.fields.IntegerField', [], {'default': '8', 'max_length': '120'}),
+ 'iscsi_maxoutstandingr2t': ('django.db.models.fields.IntegerField', [], {'default': '16', 'max_length': '120'}),
+ 'iscsi_maxrecdata': ('django.db.models.fields.IntegerField', [], {'default': '262144', 'max_length': '120'}),
+ 'iscsi_maxsesh': ('django.db.models.fields.IntegerField', [], {'default': '16', 'max_length': '120'}),
+ 'iscsi_nopinint': ('django.db.models.fields.IntegerField', [], {'default': '20', 'max_length': '120'}),
+ 'iscsi_r2t': ('django.db.models.fields.IntegerField', [], {'default': '32', 'max_length': '120'}),
+ 'iscsi_toggleluc': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'services.iscsitargetportal': {
+ 'Meta': {'object_name': 'iSCSITargetPortal'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_portal_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'iscsi_target_portal_tag': ('django.db.models.fields.IntegerField', [], {'default': '1', 'max_length': '120'})
+ },
+ 'services.iscsitargetportalip': {
+ 'Meta': {'unique_together': "(('iscsi_target_portalip_ip', 'iscsi_target_portalip_port'),)", 'object_name': 'iSCSITargetPortalIP'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_target_portalip_ip': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'iscsi_target_portalip_port': ('django.db.models.fields.SmallIntegerField', [], {'default': '3260'}),
+ 'iscsi_target_portalip_portal': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['services.iSCSITargetPortal']"})
+ },
+ 'services.iscsitargettoextent': {
+ 'Meta': {'object_name': 'iSCSITargetToExtent'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iscsi_extent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['services.iSCSITargetExtent']", 'unique': 'True'}),
+ 'iscsi_target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['services.iSCSITarget']"})
+ },
+ 'services.ldap': {
+ 'Meta': {'object_name': 'LDAP'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ldap_anonbind': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ldap_basedn': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_groupsuffix': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_hostname': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_machinesuffix': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_options': ('django.db.models.fields.TextField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_passwordsuffix': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_pwencryption': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ldap_rootbasedn': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_rootbindpw': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ldap_ssl': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ldap_tls_cacertfile': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'ldap_usersuffix': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'})
+ },
+ 'services.nfs': {
+ 'Meta': {'object_name': 'NFS'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'nfs_srv_allow_nonroot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'nfs_srv_async': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'nfs_srv_bindip': ('django.db.models.fields.CharField', [], {'max_length': '250', 'blank': 'True'}),
+ 'nfs_srv_servers': ('django.db.models.fields.PositiveIntegerField', [], {'default': '4'})
+ },
+ 'services.pluginsjail': {
+ 'Meta': {'object_name': 'PluginsJail'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'jail_ipv4address': ('freenasUI.contrib.IPAddressField.IPAddressField', [], {}),
+ 'jail_ipv4netmask': ('django.db.models.fields.CharField', [], {'max_length': '3'}),
+ 'jail_mac': ('freenasUI.freeadmin.models.MACField', [], {'default': "''", 'max_length': '17', 'blank': 'True'}),
+ 'jail_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '120'}),
+ 'jail_path': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255'}),
+ 'plugins_path': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255'})
+ },
+ 'services.rpctoken': {
+ 'Meta': {'object_name': 'RPCToken'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'secret': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
+ },
+ 'services.rsyncd': {
+ 'Meta': {'object_name': 'Rsyncd'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'rsyncd_auxiliary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'rsyncd_port': ('django.db.models.fields.IntegerField', [], {'default': '873'})
+ },
+ 'services.rsyncmod': {
+ 'Meta': {'ordering': "['rsyncmod_name']", 'object_name': 'RsyncMod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'rsyncmod_auxiliary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'rsyncmod_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'rsyncmod_group': ('freenasUI.freeadmin.models.GroupField', [], {'default': "'nobody'", 'max_length': '120', 'blank': 'True'}),
+ 'rsyncmod_hostsallow': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'rsyncmod_hostsdeny': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'rsyncmod_maxconn': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'rsyncmod_mode': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '120'}),
+ 'rsyncmod_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'rsyncmod_path': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255'}),
+ 'rsyncmod_user': ('freenasUI.freeadmin.models.UserField', [], {'default': "'nobody'", 'max_length': '120', 'blank': 'True'})
+ },
+ 'services.services': {
+ 'Meta': {'object_name': 'services'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'srv_enable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'srv_service': ('django.db.models.fields.CharField', [], {'max_length': '120'})
+ },
+ 'services.smart': {
+ 'Meta': {'object_name': 'SMART'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'smart_critical': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'smart_difference': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'smart_email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'smart_informal': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'smart_interval': ('django.db.models.fields.IntegerField', [], {'default': '30'}),
+ 'smart_powermode': ('django.db.models.fields.CharField', [], {'default': "'never'", 'max_length': '60'})
+ },
+ 'services.snmp': {
+ 'Meta': {'object_name': 'SNMP'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'snmp_community': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'snmp_contact': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'snmp_location': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'snmp_options': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'snmp_traps': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'services.ssh': {
+ 'Meta': {'object_name': 'SSH'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ssh_compression': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ssh_host_dsa_key': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_dsa_key_pub': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_ecdsa_key': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_ecdsa_key_pub': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_key': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_key_pub': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_rsa_key': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_host_rsa_key_pub': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'ssh_options': ('django.db.models.fields.TextField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ssh_passwordauth': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ssh_privatekey': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'blank': 'True'}),
+ 'ssh_rootlogin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ssh_sftp_log_facility': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
+ 'ssh_sftp_log_level': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
+ 'ssh_tcpfwd': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ssh_tcpport': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'services.tftp': {
+ 'Meta': {'object_name': 'TFTP'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tftp_directory': ('freenasUI.freeadmin.models.PathField', [], {'max_length': '255'}),
+ 'tftp_newfiles': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'tftp_options': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'tftp_port': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'tftp_umask': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'tftp_username': ('freenasUI.freeadmin.models.UserField', [], {'default': "'nobody'", 'max_length': '120'})
+ },
+ 'services.ups': {
+ 'Meta': {'object_name': 'UPS'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ups_description': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ups_driver': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ups_emailnotify': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ups_extrausers': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'ups_identifier': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ups_masterpwd': ('django.db.models.fields.CharField', [], {'default': "'fixmepass'", 'max_length': '30'}),
+ 'ups_options': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'ups_port': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ups_rmonitor': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ups_shutdown': ('django.db.models.fields.CharField', [], {'default': "'batt'", 'max_length': '120'}),
+ 'ups_shutdowntimer': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ups_subject': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ups_toemail': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['services']
\ No newline at end of file
Modified: trunk/gui/services/models.py
===================================================================
--- trunk/gui/services/models.py 2012-11-25 10:00:29 UTC (rev 12782)
+++ trunk/gui/services/models.py 2012-11-27 12:57:13 UTC (rev 12783)
@@ -1278,6 +1278,25 @@
blank=True,
help_text=_("Paste a RSA PRIVATE KEY in PEM format here.")
)
+ ssh_sftp_log_level = models.CharField(
+ verbose_name=_("SFTP Log Level"),
+ choices=choices.SFTP_LOG_LEVEL,
+ blank=True,
+ max_length=20,
+ help_text=_("Specifies which messages will be logged by "
+ "sftp-server. INFO and VERBOSE log transactions that "
+ "sftp-server performs on behalf of the client. DEBUG2 and "
+ "DEBUG3 each specify higher levels of debugging output. The "
+ "default is ERROR."),
+ )
+ ssh_sftp_log_facility = models.CharField(
+ verbose_name=_("SFTP Log Facility"),
+ choices=choices.SFTP_LOG_FACILITY,
+ blank=True,
+ max_length=20,
+ help_text=_("Specifies the facility code that is used when "
+ "logging messages from sftp-server."),
+ )
ssh_options = models.TextField(
max_length=120,
verbose_name=_("Extra options"),
@@ -1342,6 +1361,10 @@
class FreeAdmin:
deletable = False
icon_model = "OpenSSHIcon"
+ advanced_fields = (
+ 'ssh_sftp_log_level',
+ 'ssh_sftp_log_facility',
+ )
class ActiveDirectory(Model):
Modified: trunk/nanobsd/Files/etc/rc.d/ix-sshd
===================================================================
--- trunk/nanobsd/Files/etc/rc.d/ix-sshd 2012-11-25 10:00:29 UTC (rev 12782)
+++ trunk/nanobsd/Files/etc/rc.d/ix-sshd 2012-11-27 12:57:13 UTC (rev 12783)
@@ -19,7 +19,7 @@
generate_sshd()
{
local IFS="|"
- local f="ssh_tcpport ssh_rootlogin ssh_passwordauth ssh_tcpfwd ssh_compression"
+ local f="ssh_tcpport ssh_rootlogin ssh_passwordauth ssh_tcpfwd ssh_compression ssh_sftp_log_level ssh_sftp_log_facility"
eval local $f
local sf=$(var_to_sf $f)
local cmd cfg
@@ -45,11 +45,13 @@
${FREENAS_SQLITE_CMD} ${FREENAS_CONFIG} \
"SELECT $sf FROM services_ssh ORDER BY -id LIMIT 1" | \
- while eval read $f; do
+ while eval read -r $f; do
+ ssh_sftp_log_level=${ssh_sftp_log_level:-"ERROR"}
+ ssh_sftp_log_facility=${ssh_sftp_log_facility:-"AUTH"}
cat > $cfg <<EOF
Protocol 2
UseDNS no
-Subsystem sftp /usr/libexec/sftp-server
+Subsystem sftp /usr/libexec/sftp-server -l ${ssh_sftp_log_level} -f ${ssh_sftp_log_facility}
ChallengeResponseAuthentication no
ClientAliveCountMax 3
ClientAliveInterval 15
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|