Revision: 13039
http://freenas.svn.sourceforge.net/freenas/?rev=13039&view=rev
Author: jhixson
Date: 2013-01-15 16:32:40 +0000 (Tue, 15 Jan 2013)
Log Message:
-----------
MFC r13024 r13025 r13026 r13027 r13030 r13031 r13032 r13035 - Active Directory advanced fields
Revision Links:
--------------
http://freenas.svn.sourceforge.net/freenas/?rev=13024&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13025&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13026&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13027&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13030&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13031&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13032&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=13035&view=rev
Modified Paths:
--------------
branches/8.3/gui/common/freenasldap.py
branches/8.3/gui/services/models.py
branches/8.3/nanobsd/Files/etc/rc.d/ix-kerberos
branches/8.3/nanobsd/Files/etc/rc.d/ix-samba
branches/8.3/nanobsd/Files/etc/rc.freenas
Added Paths:
-----------
branches/8.3/gui/services/migrations/0079_auto__add_field_activedirectory_ad_dchost__add_field_activedirectory_a.py
branches/8.3/gui/services/migrations/0080_auto__del_field_activedirectory_ad_dchost__del_field_activedirectory_a.py
Property Changed:
----------------
branches/8.3/
branches/8.3/nanobsd/Files/etc/rc.freenas
Index: branches/8.3
===================================================================
--- branches/8.3 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3 2013-01-15 16:32:40 UTC (rev 13039)
Property changes on: branches/8.3
___________________________________________________________________
Modified: svn:mergeinfo
## -9,4 +9,4 ##
/branches/feedback:6189-6347
/experimental/ix-8.2:5657-5682
/tags/8.0.3-BETA2:9099-9100
-/trunk:7833-7857,12269,12272-12273,12286,12290,12319,12331-12332,12350,12376,12378,12412,12595,12597,12599,12604,12696,12698,12738,12795
+/trunk:7833-7857,12269,12272-12273,12286,12290,12319,12331-12332,12350,12376,12378,12412,12595,12597,12599,12604,12696,12698,12738,12795,13024-13027,13030-13032,13035
\ No newline at end of property
Modified: branches/8.3/gui/common/freenasldap.py
===================================================================
--- branches/8.3/gui/common/freenasldap.py 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3/gui/common/freenasldap.py 2013-01-15 16:32:40 UTC (rev 13039)
@@ -69,7 +69,6 @@
FREENAS_AD_LOCAL_GROUPCACHE = os.path.join(FREENAS_AD_LOCALDIR, ".groups")
FREENAS_AD_SEPARATOR = get_freenas_var("FREENAS_AD_SEPARATOR", '\\')
-FREENAS_AD_KNOBS_FILE = get_freenas_var("AD_KNOBS_FILE", "/etc/ActiveDirectory/knobs")
FREENAS_AD_CONFIG_FILE = get_freenas_var("AD_CONFIG_FILE", "/etc/ActiveDirectory/config")
FREENAS_LDAP_CACHE_EXPIRE = get_freenas_var("FREENAS_LDAP_CACHE_EXPIRE", 60)
@@ -1031,11 +1030,11 @@
self.bindpw = None
self.domain = None
self.dcname = None
+ self.dchost = None
self.dcport = None
- self.dc = None
+ self.gcname = None
self.gchost = None
self.gcport = None
- self.gc = None
self.netbiosname = None
self.unix = None
self.default = None
@@ -1053,13 +1052,11 @@
'basedn': None,
'binddn': None,
'dcname': None,
+ 'dchost': None,
'dcport': None,
- 'dc': None,
+ 'gcname': None,
'gchost': None,
- 'gcport': None,
- 'gc': None,
- 'krbhost': None,
- 'kpwdhost': None
+ 'gcport': None
}
if os.access(FREENAS_AD_CONFIG_FILE, os.F_OK):
@@ -1077,24 +1074,24 @@
#self.bindpw = self.adset(self.config['bindpw'])
self.domain = self.adset(self.config['domainname'])
- self.dcname = None
+ self.dchost = None
self.dcport = None
- self.dc = self.adset(self.config['dc'])
- if self.dc:
- parts = self.dc.split(':')
- self.dcname = parts[0]
+ self.dcname = self.adset(self.config['dcname'])
+ if self.dcname:
+ parts = self.dcname.split(':')
+ self.dchost = parts[0]
if len(parts) > 1:
self.dcport = parts[1]
- self.dcname = self.adset(self.dcname, self.config['dcname'])
+ self.dchost = self.adset(self.dchost, self.config['dchost'])
self.dcport = self.adset(self.dcport, self.config['dcport'])
self.dcport = self.adset(self.dcport, 389)
self.gchost = None
self.gcport = None
- self.gc = self.adset(self.config['gc'])
- if self.gc:
- parts = self.gc.split(':')
+ self.gcname = self.adset(self.config['gcname'])
+ if self.gcname:
+ parts = self.gcname.split(':')
self.gchost = parts[0]
if len(parts) > 1:
self.gcport = parts[1]
@@ -1106,78 +1103,7 @@
log.debug("FreeNAS_ActiveDirectory_Base.__get_config: leave")
return res
- def __get_knobs(self):
- log.debug("FreeNAS_ActiveDirectory_Base.__get_knobs: enter")
- res = False
- self.knobs = {
- 'adminname': None,
- 'allow_trusted_doms': None,
- 'basedn': None,
- 'binddn': None,
- 'bindpw': None,
- 'bindpw': None,
- 'dc': None,
- 'dcname': None,
- 'dcport': None,
- 'domainname': None,
- 'gc': None,
- 'gchost': None,
- 'gcport': None,
- 'unix_extensions': None,
- 'use_default_domain': None,
- 'workgroup': None
- }
-
- if os.access(FREENAS_AD_KNOBS_FILE, os.F_OK):
- for knob in self.knobs:
- self.knobs[knob] = get_freenas_var_by_file(FREENAS_AD_KNOBS_FILE, knob)
- if self.knobs[knob]:
- res = True
- else:
- log.debug("FreeNAS_ActiveDirectory_Base.__get_knobs: leave")
- return res
-
- self.adminname = self.adset(self.knobs['adminname'])
- self.trusted = self.adset(self.knobs['allow_trusted_doms'], False)
- self.basedn = self.adset(self.knobs['basedn'])
- self.binddn = self.adset(self.knobs['binddn'])
- self.bindpw = self.adset(self.knobs['bindpw'])
- self.domain = self.adset(self.knobs['domainname'])
-
- self.dcname = None
- self.dcport = None
- self.dc = self.adset(self.knobs['dc'])
- if self.dc:
- parts = self.dc.split(':')
- self.dcname = parts[0]
- if len(parts) > 1:
- self.dcport = parts[1]
-
- self.dcname = self.adset(self.dcname, self.knobs['dcname'])
- self.dcport = self.adset(self.dcport, self.knobs['dcport'])
- self.dcport = self.adset(self.dcport, 389)
-
- self.gchost = None
- self.gcport = None
- self.gc = self.adset(self.knobs['gc'])
- if self.gc:
- parts = self.gc.split(':')
- self.gchost = parts[0]
- if len(parts) > 1:
- self.gcport = parts[1]
-
- self.gchost = self.adset(self.gchost, self.knobs['gchost'])
- self.gcport = self.adset(self.gcport, self.knobs['gcport'])
- self.gcport = self.adset(self.gcport, 3268)
-
- self.netbiosname = self.adset(self.knobs['workgroup'])
- self.unix = self.adset(self.knobs['unix_extensions'], False)
- self.default = self.adset(self.knobs['use_default_domain'], False)
-
- log.debug("FreeNAS_ActiveDirectory_Base.__get_knobs: leave")
- return res
-
def __db_init__(self, **kwargs):
log.debug("FreeNAS_ActiveDirectory_Base.__db_init__: enter")
@@ -1201,10 +1127,10 @@
host = port = None
args = {'binddn': self.binddn, 'bindpw': self.bindpw}
- if not self.dcname:
+ if not self.dchost:
(host, port) = self.dc_connect(self.domain, self.binddn, self.bindpw)
else:
- host = self.dcname
+ host = self.dchost
port = self.dcport
args['host'] = host
@@ -1230,7 +1156,7 @@
self.default = False
self.unix = False
- self.dcname = self.adset(self.dcname, kwargs.get('host', None))
+ self.dchost = self.adset(self.dchost, kwargs.get('host', None))
self.dcport = self.adset(self.dcport, kwargs.get('port', None))
tmphost = kwargs.get('host', None)
@@ -1259,16 +1185,16 @@
"neither host nor domain specified, nothing will work, #fail.")
(host, port) = (None, None)
- if self.dc:
- parts = self.dc.split(':')
- self.dcname = parts[0]
+ if self.dcname:
+ parts = self.dcname.split(':')
+ self.dchost = parts[0]
if len(parts) > 1:
self.dcport = parts[1]
- if not self.dcname:
+ if not self.dchost:
(host, port) = self.dc_connect(self.domain, self.binddn, self.bindpw)
else:
- host = self.dcname
+ host = self.dchost
port = self.dcport
args['host'] = host
@@ -1289,7 +1215,6 @@
self.__set_defaults()
self.__get_config()
- self.__get_knobs()
__initfunc__ = self.__no_db_init__
if kwargs.has_key('flags') and (kwargs['flags'] & FLAGS_DBINIT):
Copied: branches/8.3/gui/services/migrations/0079_auto__add_field_activedirectory_ad_dchost__add_field_activedirectory_a.py (from rev 13024, trunk/gui/services/migrations/0079_auto__add_field_activedirectory_ad_dchost__add_field_activedirectory_a.py)
===================================================================
--- branches/8.3/gui/services/migrations/0079_auto__add_field_activedirectory_ad_dchost__add_field_activedirectory_a.py (rev 0)
+++ branches/8.3/gui/services/migrations/0079_auto__add_field_activedirectory_ad_dchost__add_field_activedirectory_a.py 2013-01-15 16:32:40 UTC (rev 13039)
@@ -0,0 +1,376 @@
+# -*- 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 'ActiveDirectory.ad_dchost'
+ db.add_column('services_activedirectory', 'ad_dchost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_gchost'
+ db.add_column('services_activedirectory', 'ad_gchost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_krbhost'
+ db.add_column('services_activedirectory', 'ad_krbhost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_kpwdhost'
+ db.add_column('services_activedirectory', 'ad_kpwdhost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_timeout'
+ db.add_column('services_activedirectory', 'ad_timeout',
+ self.gf('django.db.models.fields.IntegerField')(default=10),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'ActiveDirectory.ad_dchost'
+ db.delete_column('services_activedirectory', 'ad_dchost')
+
+ # Deleting field 'ActiveDirectory.ad_gchost'
+ db.delete_column('services_activedirectory', 'ad_gchost')
+
+ # Deleting field 'ActiveDirectory.ad_krbhost'
+ db.delete_column('services_activedirectory', 'ad_krbhost')
+
+ # Deleting field 'ActiveDirectory.ad_kpwdhost'
+ db.delete_column('services_activedirectory', 'ad_kpwdhost')
+
+ # Deleting field 'ActiveDirectory.ad_timeout'
+ db.delete_column('services_activedirectory', 'ad_timeout')
+
+
+ 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_dchost': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_domainname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_gchost': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_kpwdhost': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_krbhost': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_netbiosname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ '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
Copied: branches/8.3/gui/services/migrations/0080_auto__del_field_activedirectory_ad_dchost__del_field_activedirectory_a.py (from rev 13026, trunk/gui/services/migrations/0080_auto__del_field_activedirectory_ad_dchost__del_field_activedirectory_a.py)
===================================================================
--- branches/8.3/gui/services/migrations/0080_auto__del_field_activedirectory_ad_dchost__del_field_activedirectory_a.py (rev 0)
+++ branches/8.3/gui/services/migrations/0080_auto__del_field_activedirectory_ad_dchost__del_field_activedirectory_a.py 2013-01-15 16:32:40 UTC (rev 13039)
@@ -0,0 +1,400 @@
+# -*- 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):
+ # Deleting field 'ActiveDirectory.ad_dchost'
+ db.delete_column('services_activedirectory', 'ad_dchost')
+
+ # Deleting field 'ActiveDirectory.ad_kpwdhost'
+ db.delete_column('services_activedirectory', 'ad_kpwdhost')
+
+ # Deleting field 'ActiveDirectory.ad_krbhost'
+ db.delete_column('services_activedirectory', 'ad_krbhost')
+
+ # Deleting field 'ActiveDirectory.ad_gchost'
+ db.delete_column('services_activedirectory', 'ad_gchost')
+
+ # Adding field 'ActiveDirectory.ad_dcname'
+ db.add_column('services_activedirectory', 'ad_dcname',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_gcname'
+ db.add_column('services_activedirectory', 'ad_gcname',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_krbname'
+ db.add_column('services_activedirectory', 'ad_krbname',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_kpwdname'
+ db.add_column('services_activedirectory', 'ad_kpwdname',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Adding field 'ActiveDirectory.ad_dchost'
+ db.add_column('services_activedirectory', 'ad_dchost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_kpwdhost'
+ db.add_column('services_activedirectory', 'ad_kpwdhost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_krbhost'
+ db.add_column('services_activedirectory', 'ad_krbhost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Adding field 'ActiveDirectory.ad_gchost'
+ db.add_column('services_activedirectory', 'ad_gchost',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True),
+ keep_default=False)
+
+ # Deleting field 'ActiveDirectory.ad_dcname'
+ db.delete_column('services_activedirectory', 'ad_dcname')
+
+ # Deleting field 'ActiveDirectory.ad_gcname'
+ db.delete_column('services_activedirectory', 'ad_gcname')
+
+ # Deleting field 'ActiveDirectory.ad_krbname'
+ db.delete_column('services_activedirectory', 'ad_krbname')
+
+ # Deleting field 'ActiveDirectory.ad_kpwdname'
+ db.delete_column('services_activedirectory', 'ad_kpwdname')
+
+
+ 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_dcname': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_domainname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_gcname': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_kpwdname': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_krbname': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+ 'ad_netbiosname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'ad_timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ '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: branches/8.3/gui/services/models.py
===================================================================
--- branches/8.3/gui/services/models.py 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3/gui/services/models.py 2013-01-15 16:32:40 UTC (rev 13039)
@@ -1419,32 +1419,69 @@
verbose_name=_("Workgroup Name"),
help_text=_("Workgroup or domain name in old format, eg WORKGROUP")
)
+ ad_adminname = models.CharField(
+ max_length=120,
+ verbose_name=_("Administrator Name"),
+ help_text=_("Domain Administrator account name")
+ )
+ ad_adminpw = models.CharField(
+ max_length=120,
+ verbose_name=_("Administrator Password"),
+ help_text=_("Domain Administrator account password.")
+ )
+
+ #
+ # AD Advanced settings
+ #
+
+ ad_verbose_logging = models.BooleanField(
+ default=False,
+ verbose_name=_("Verbose logging"),
+ )
+ ad_unix_extensions = models.BooleanField(
+ default=False,
+ verbose_name=_("UNIX extensions"),
+ help_text=_("Set this if your Active Directory has UNIX extensions.")
+ )
ad_allow_trusted_doms = models.BooleanField(
default=False,
verbose_name=_("Allow Trusted Domains"),
+ help_text=_("Set this if you want to allow Trusted Domains.")
)
ad_use_default_domain = models.BooleanField(
default=True,
verbose_name=_("Use default domain"),
+ help_text=_("Set this if you want to use the default domain for users and groups.")
)
- ad_unix_extensions = models.BooleanField(
- default=False,
- verbose_name=_("UNIX extensions"),
+ ad_dcname = models.CharField(
+ max_length=120,
+ blank=True,
+ verbose_name=_("Domain Controller"),
+ help_text=_("Hostname of the domain controller to use."),
)
- ad_verbose_logging = models.BooleanField(
- default=False,
- verbose_name=_("Verbose logging"),
+ ad_gcname = models.CharField(
+ max_length=120,
+ blank=True,
+ verbose_name=_("Global Catalog Server"),
+ help_text=_("Hostname of the global catalog server to use."),
)
- ad_adminname = models.CharField(
+ ad_krbname = models.CharField(
max_length=120,
- verbose_name=_("Administrator Name"),
- help_text=_("Domain Administrator account name")
+ blank=True,
+ verbose_name=_("Kerberos Server"),
+ help_text=_("Hostname of the kerberos server to use."),
)
- ad_adminpw = models.CharField(
+ ad_kpwdname = models.CharField(
max_length=120,
- verbose_name=_("Administrator Password"),
- help_text=_("Domain Administrator account password.")
+ blank=True,
+ verbose_name=_("Kerberos Password Server"),
+ help_text=_("Hostname of the kerberos password server to use."),
)
+ ad_timeout = models.IntegerField(
+ default=10,
+ verbose_name=_("AD timeout"),
+ help_text=_("Timeout for AD related commands."),
+ )
class Meta:
verbose_name = _("Active Directory")
@@ -1453,8 +1490,18 @@
class FreeAdmin:
deletable = False
icon_model = "ActiveDirectoryIcon"
+ advanced_fields = (
+ 'ad_verbose_logging',
+ 'ad_unix_extensions',
+ 'ad_allow_trusted_doms',
+ 'ad_use_default_domain',
+ 'ad_dchost',
+ 'ad_gchost',
+ 'ad_krbhost',
+ 'ad_kpwdhost',
+ 'ad_timeout'
+ )
-
class LDAP(Model):
ldap_hostname = models.CharField(
max_length=120,
Modified: branches/8.3/nanobsd/Files/etc/rc.d/ix-kerberos
===================================================================
--- branches/8.3/nanobsd/Files/etc/rc.d/ix-kerberos 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3/nanobsd/Files/etc/rc.d/ix-kerberos 2013-01-15 16:32:40 UTC (rev 13039)
@@ -16,7 +16,10 @@
AD_init
local krbhost=$(AD_get krbhost)
+ local krbport=$(AD_get krbport)
+ local krbsvc=$(AD_get krbsvc)
local kpwdhost=$(AD_get kpwdhost)
+ local kpwdport=$(AD_get kpwdport)
local domainname=$(AD_get domainname)
local template="${PATH_KRB5_TEMPLATE}"
@@ -29,14 +32,32 @@
fi
awk -v realm="${domainname}" \
- -v kdc="${krbhost}" \
- -v kpwd="${kpwdhost}" \
+ -v krbhost="${krbhost}" \
+ -v krbport="${krbport}" \
+ -v krbsvc="${krbsvc}" \
+ -v kpwdhost="${kpwdhost}" \
+ -v kpwdport="${kpwdport}" \
'
BEGIN {
- kdc = sprintf("%s", tolower(kdc));
+ kdc = tolower(krbhost);
+ if (krbsvc) {
+ kdc = sprintf("%s/%s", tolower(krbsvc), kdc);
+ }
+ if (krbport) {
+ kdc = sprintf("%s:%d", kdc, krbport);
+ }
+ admin_server = tolower(krbhost);
+ if (krbport) {
+ admin_server = sprintf("%s:%d", admin_server, krbport);
+ }
+ kpwd = tolower(kpwdhost);
+ if (kpwdport) {
+ kpwd = sprintf("%s:%d", kpwd, kpwdport);
+ }
+
vars["@@UPPER_REALM@@"] = toupper(realm);
vars["@@LOWER_REALM@@"] = tolower(realm);
- vars["@@ADMIN_SERVER@@"] = kdc;
+ vars["@@ADMIN_SERVER@@"] = admin_server;
vars["@@KPASSWD_SERVER@@"] = kpwd;
vars["@@DOMAIN@@"] = tolower(realm);
vars["@@KDC@@"] = kdc;
Modified: branches/8.3/nanobsd/Files/etc/rc.d/ix-samba
===================================================================
--- branches/8.3/nanobsd/Files/etc/rc.d/ix-samba 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3/nanobsd/Files/etc/rc.d/ix-samba 2013-01-15 16:32:40 UTC (rev 13039)
@@ -285,8 +285,8 @@
client use spnego = yes
cache directory = ${FREENAS_CACHEDIR}/.samba
- wins server = $(AD_get dcname)
- password server = $(AD_get dcname)
+ wins server = $(AD_get dchost)
+ password server = $(AD_get dchost)
local master = no
domain master = no
Modified: branches/8.3/nanobsd/Files/etc/rc.freenas
===================================================================
--- branches/8.3/nanobsd/Files/etc/rc.freenas 2013-01-15 16:29:29 UTC (rev 13038)
+++ branches/8.3/nanobsd/Files/etc/rc.freenas 2013-01-15 16:32:40 UTC (rev 13039)
@@ -118,7 +118,6 @@
#
: ${AD_CONFIG_PATH:="/etc/ActiveDirectory"}
: ${AD_CONFIG_FILE:="${AD_CONFIG_PATH}/config"}
-: ${AD_KNOBS_FILE:="${AD_CONFIG_PATH}/knobs"}
: ${AD_CONTROL_FILE:="${AD_CONFIG_PATH}/ctl"}
: ${AD_NET_ADS_TIMEOUT:="10"}
@@ -287,6 +286,15 @@
return ${res}
}
+AD_get_root_domain()
+{
+ local domain="${1}"
+ local rdnc="$(AD_query_rootDSE|egrep '^rootDomainNamingContext'|cut -f2- -d:|xargs)"
+ local dnsroot="$(AD_get_partition "${rdnc}" dnsRoot|egrep '^dnsRoot'|cut -f2- -d:|xargs)"
+
+ echo "${dnsroot}"
+}
+
AD_locate_domain_controllers_by_guid()
{
local domain="${1}"
@@ -631,7 +639,7 @@
__do_AD_query()
{
- local dcname="${1}"
+ local dchost="${1}"
local dcport="${2}"
local basedn="${3}"
local binddn="${4}"
@@ -641,7 +649,7 @@
local attributes="${8}"
local tmpfile="$(mktemp -q /var/tmp/.adbarXXXXXX)"
- : ${dcname:="$(AD_get dcname)"}
+ : ${dchost:="$(AD_get dchost)"}
: ${dcport:="$(AD_get dcport)"}
: ${basedn:="$(AD_get basedn)"}
: ${binddn:="$(AD_get binddn)"}
@@ -651,7 +659,7 @@
cat<<-__EOF__>"${tmpfile}"
/usr/local/bin/ldapsearch \
- -H "ldap://${dcname}:${dcport}" \
+ -H "ldap://${dchost}:${dcport}" \
-b "${basedn}" \
-D "${binddn}" \
-w "${adminpw}" \
@@ -682,26 +690,39 @@
AD_log "AD_query: basedn = ${basedn}, filter = ${filter}, attributes = ${attributes}"
- local dcname="$(AD_get dcname)"
+ local dchost="$(AD_get dchost)"
local dcport="$(AD_get dcport)"
local binddn="$(AD_get binddn)"
local adminpw="$(AD_get adminpw)"
- __do_AD_query "${dcname}" "${dcport}" "${basedn}" \
+ __do_AD_query "${dchost}" "${dcport}" "${basedn}" \
"${binddn}" "${adminpw}" "sub" "${filter}" \
"${attributes}" 2>/dev/null
}
-AD_query_partitions()
+AD_get_partitions()
{
local config="$(AD_query_rootDSE|egrep '^configurationNamingContext'|cut -f2- -d:|xargs)"
local basedn="CN=Partitions,${config}"
- AD_log "AD_query_partitions: config = ${config}, basedn = ${basedn}"
+ AD_log "AD_get_partitions: config = ${config}, basedn = ${basedn}"
AD_query "${basedn}" "" netbiosname|grep '^nETBIOSName'|cut -f2- -d:|xargs
}
+AD_get_partition()
+{
+ local ncname="${1}"
+ shift
+ local attributes="${*}"
+
+ local config="$(AD_query_rootDSE|egrep '^configurationNamingContext'|cut -f2- -d:|xargs)"
+ local basedn="CN=Partitions,${config}"
+
+ AD_log "AD_get_partition: config = ${config}, basedn = ${basedn}, ncname = ${ncname}"
+ AD_query "${basedn}" "ncname=${ncname}" ${attributes}
+}
+
AD_query_global_catalog()
{
local filter="${1}"
@@ -747,14 +768,14 @@
AD_log "AD_query_rootDSE: filter = ${filter}, attributes = ${attributes}"
- local dcname="$(AD_get dcname)"
+ local dchost="$(AD_get dchost)"
local dcport="$(AD_get dcport)"
local binddn="$(AD_get binddn)"
local adminpw="$(AD_get adminpw)"
cat<<-__EOF__>"${tmpfile}"
/usr/local/bin/ldapsearch \
- -H "ldap://${dcname}:${dcport}" \
+ -H "ldap://${dchost}:${dcport}" \
-D "${binddn}" \
-w "${adminpw}" \
-b "" \
@@ -831,8 +852,9 @@
AD_save()
{
local prefix="__save_"
- local vars="dcname dcport domainname basedn adminname \
- adminpw workgroup netbiosname gchost gcport"
+ local vars="adminname domainname basedn binddn dcname \
+ dchost dcport gcname gchost gcport krbname krbhost \
+ krbport kpwdname kpwdhost kpwdport"
for v in ${vars}
do
@@ -843,8 +865,9 @@
AD_restore()
{
local prefix="__save_"
- local vars="dcname dcport domainname basedn adminname \
- adminpw workgroup netbiosname gchost gcport"
+ local vars="adminname domainname basedn binddn dcname \
+ dchost dcport gcname gchost gcport krbname krbhost \
+ krbport kpwdname kpwdhost kpwdport"
for v in ${vars}
do
@@ -856,7 +879,7 @@
{
printf "Active Directory Config:\n"
printf "+------------------------------------------+\n"
- printf "dcname: %s\n" $(AD_get dcname)
+ printf "dchost: %s\n" $(AD_get dchost)
printf "dcport: %d\n" $(AD_get dcport)
printf "domainname: %s\n" $(AD_get domainname)
printf "basedn: %s\n" $(AD_get basedn)
@@ -866,6 +889,14 @@
printf "netbiosname: %s\n" $(AD_get netbiosname)
printf "gchost: %s\n" $(AD_get gchost)
printf "gcport: %d\n" $(AD_get gcport)
+ printf "krbhost: %s\n" $(AD_get krbhost)
+ printf "krbport: %d\n" $(AD_get krbport)
+ printf "kpwdhost: %s\n" $(AD_get kpwdhost)
+ printf "kpwdport: %d\n" $(AD_get kpwdport)
+ printf "unix: %s\n" $(AD_get unix_extensions)
+ printf "trusted: %s\n" $(AD_get allow_trusted_doms)
+ printf "default: %s\n" $(AD_get use_default_domain)
+ printf "verbose: %s\n" $(AD_get verbose_logging)
printf "+------------------------------------------+\n"
}
@@ -964,7 +995,15 @@
ad_adminpw,
ad_workgroup,
ad_netbiosname,
- ad_verbose_logging
+ ad_verbose_logging,
+ ad_unix_extensions,
+ ad_allow_trusted_doms,
+ ad_use_default_domain,
+ ad_dcname,
+ ad_gcname,
+ ad_krbname,
+ ad_kpwdname,
+ ad_timeout
FROM
services_activedirectory
@@ -996,13 +1035,17 @@
basedn \
binddn \
dcname \
+ dchost \
dcport \
- dc \
+ gcname \
gchost \
gcport \
- gc \
+ krbname\
krbhost \
+ krbport \
+ kpwdname \
kpwdhost \
+ kpwdport \
"
: > "${AD_CONFIG_FILE}"
@@ -1032,11 +1075,6 @@
config_exists=1
fi
- if [ -f "${AD_KNOBS_FILE}" ]
- then
- . "${AD_KNOBS_FILE}"
- fi
-
if [ "${config_exists}" = "1" ]
then
return 0
@@ -1048,49 +1086,104 @@
local binddn=$(AD_get binddn)
if [ -z "${binddn}" ]
then
- AD_set binddn "${adminname}@$(echo ${domainname}|tr a-z A-Z)"
+ binddn="${adminname}@$(echo ${domainname}|tr a-z A-Z)"
+ AD_set binddn "${binddn}"
fi
AD_log "AD_init: binddn = $(AD_get binddn)"
- local dc=$(AD_get dc)
- if [ -z "${dc}" ]
+ local dcname=$(AD_get dcname)
+ if [ -z "${dcname}" ]
then
- dc=$(AD_get_domain_controller "${domainname}")
+ dcname=$(AD_get_domain_controller "${domainname}")
+ AD_set dcname "${dcname}"
fi
- AD_set dcname "$(echo "${dc}"|cut -f1 -d:)"
- AD_set dcport "$(echo "${dc}"|cut -f2 -d:)"
- AD_log "AD_init: dcname = $(AD_get dcname), dcport = $(AD_get dcport)"
+ local dchost="$(echo "${dcname}"|cut -f1 -d:)"
+ local dcport="$(echo "${dcname}"|cut -f2 -d: -s)"
+ if [ -z "${dcport}" ]
+ then
+ dcport=389
+ fi
+ AD_set dchost "${dchost}"
+ AD_set dcport "${dcport}"
+
+ AD_log "AD_init: dchost = $(AD_get dchost), dcport = $(AD_get dcport)"
+
local basedn=$(AD_get basedn)
if [ -z "${basedn}" ]
then
- AD_set basedn "$(AD_query_rootDSE|egrep '^defaultNamingContext'|cut -f2- -d:|xargs)"
+ basedn="$(AD_query_rootDSE|egrep '^defaultNamingContext'|cut -f2- -d:|xargs)"
+ AD_set basedn "${basedn}"
fi
AD_log "AD_init: basedn = $(AD_get basedn)"
- local gc=$(AD_get gc)
- if [ -z "${gc}" ]
+ local gcname=$(AD_get gcname)
+ if [ -z "${gcname}" ]
then
- gc=$(AD_get_domain_global_catalog_server "${domainname}")
+
+ local rd="$(AD_get_root_domain "${domainname}")"
+ gcname="$(AD_get_domain_global_catalog_server "${rd}")"
+ AD_set gcname "${gcname}"
fi
- AD_set gchost "$(echo "${gc}"|cut -f1 -d:)"
- AD_set gcport "$(echo "${gc}"|cut -f2 -d:)"
+ local gchost="$(echo "${gcname}"|cut -f1 -d:)"
+ local gcport="$(echo "${gcname}"|cut -f2 -d: -s)"
+
+ if [ -z "${gcport}" ]
+ then
+ gcport=3268
+ fi
+
+ AD_set gchost "${gchost}"
+ AD_set gcport "${gcport}"
AD_log "AD_init: gchost = $(AD_get gchost), gcport = $(AD_get gcport)"
- local krbhost=$(AD_get krbhost)
- if [ -z "${krbhost}" ]
+ local krbname=$(AD_get krbname)
+ if [ -z "${krbname}" ]
then
- AD_set krbhost "$(AD_get_kerberos_server ${domainname})"
+ krbname="$(AD_get_kerberos_server ${domainname})"
+ AD_set krbname "${krbname}"
fi
- local kpwdhost=$(AD_get kpwdhost)
- if [ -z "${kpwdhost}" ]
+ krbsvc="$(echo "${krbname}"|cut -f1 -d/ -s)"
+ if [ -n "${krbsvc}" ]
then
- AD_set kpwdhost "$(AD_get_kpasswd_server ${domainname})"
+ AD_set krbsvc "${krbsvc}"
fi
+ krbtemp="$(echo "${krbname}"|cut -f2 -d/)"
+ krbhost="$(echo "${krbtemp}"|cut -f1 -d:)"
+ krbport="$(echo "${krbtemp}"|cut -f2 -d: -s)"
+
+ if [ -z "${krbport}" ]
+ then
+ krbport=88
+ fi
+
+ AD_set krbhost "${krbhost}"
+ AD_set krbport "${krbport}"
+ AD_log "AD_init: krbhost = $(AD_get krbhost), krbport = $(AD_get krbport)"
+
+ local kpwdname=$(AD_get kpwdname)
+ if [ -z "${kpwdname}" ]
+ then
+ kpwdname="$(AD_get_kpasswd_server ${domainname})"
+ AD_set kpwdname "${kpwdname}"
+ fi
+
+ kpwdhost="$(echo "${kpwdname}"|cut -f1 -d:)"
+ kpwdport="$(echo "${kpwdname}"|cut -f2 -d: -s)"
+
+ if [ -z "${kpwdport}" ]
+ then
+ kpwdport=464
+ fi
+
+ AD_set kpwdhost "${kpwdhost}"
+ AD_set kpwdport "${kpwdname}"
+ AD_log "AD_init: kpwdhost = $(AD_get kpwdhost), kpwdport = $(AD_get kpwdport)"
+
AD_generate_config
return 0
}
Property changes on: branches/8.3/nanobsd/Files/etc/rc.freenas
___________________________________________________________________
Modified: svn:mergeinfo
## -9,4 +9,4 ##
/branches/feedback/nanobsd/Files/etc/rc.freenas:6189-6347
/experimental/ix-8.2/nanobsd/Files/etc/rc.freenas:5657-5682
/tags/8.0.3-BETA2/nanobsd/Files/etc/rc.freenas:9099-9100
-/trunk/nanobsd/Files/etc/rc.freenas:7833-7857,12269,12272-12273,12286,12290,12319,12331-12332,12376,12378,12394,12795
+/trunk/nanobsd/Files/etc/rc.freenas:7833-7857,12269,12272-12273,12286,12290,12319,12331-12332,12376,12378,12394,12795,13027,13030-13032,13035
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|