Revision: 9339
http://freenas.svn.sourceforge.net/freenas/?rev=9339&view=rev
Author: yaberauneya
Date: 2011-12-28 19:26:35 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
Merge changes from trunk to 8.0.3
------------------------------------------------------------------------
r9337 | yaberauneya | 2011-12-28 11:24:40 -0800 (Wed, 28 Dec 2011) | 2 lines
Provide better diagnostic output when creating a home directory fails.
------------------------------------------------------------------------
r9336 | yaberauneya | 2011-12-28 11:21:37 -0800 (Wed, 28 Dec 2011) | 2 lines
Add a safety belt to ensure that the user doesn't put his/her home directory under a subdirectory on the /mnt memory disk.
Revision Links:
--------------
http://freenas.svn.sourceforge.net/freenas/?rev=9337&view=rev
http://freenas.svn.sourceforge.net/freenas/?rev=9336&view=rev
Modified Paths:
--------------
branches/8.0.3/gui/middleware/notifier.py
branches/8.0.3/gui/services/models.py
branches/8.0.3/nanobsd/Files/etc/rc.conf.local
branches/8.0.3/nanobsd/Files/etc/rc.d/ix-samba
Added Paths:
-----------
branches/8.0.3/gui/services/migrations/0053_auto__add_field_cifs_cifs_srv_zeroconf.py
Property Changed:
----------------
branches/8.0.3/
branches/8.0.3/gui/middleware/notifier.py
Property changes on: branches/8.0.3
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/8.1:6033-6383
/branches/feedback:6189-6347
/experimental/ix-8.2:5657-5682
/tags/8.0.3-BETA2:9099-9100
/trunk:7248,7255,7262,7349-7361,7363,7371,7375,7381,7383,7385-7392,7395,7398,7402-7405,7418,7426,7440,7444,7448,7450,7452,7454,7463,7472,7491,7511,7520,7531-7534,7546,7568,7603,7608,7622,7633,7641,7649,7733,7833-7858,7909,7940-7941,7952-7954,7957,7982-7983,8003-8004,8049,8052,8093,8095,8097-8099,8103,8105,8126,8147-8148,8172-8173,8176,8185,8196,8198-8199,8242,8263,8284,8298,8302,8375,8380,8447-8452,8470-8471,8473,8497,8499,8507-8508,8513,8563,8581,8587,8592,8599,8636,8666,8675,8687,8701,8707-8708,8719,8746,8755,8778,8795,8826,8890-8891,8928-8929,8931,8957,8962,8965,8967,8986,8994,9031-9032,9039,9046,9084,9244,9246,9325,9330,9332
+ /branches/8.1:6033-6383
/branches/feedback:6189-6347
/experimental/ix-8.2:5657-5682
/tags/8.0.3-BETA2:9099-9100
/trunk:7248,7255,7262,7349-7361,7363,7371,7375,7381,7383,7385-7392,7395,7398,7402-7405,7418,7426,7440,7444,7448,7450,7452,7454,7463,7472,7491,7511,7520,7531-7534,7546,7568,7603,7608,7622,7633,7641,7649,7733,7833-7858,7909,7940-7941,7952-7954,7957,7982-7983,8003-8004,8049,8052,8093,8095,8097-8099,8103,8105,8126,8147-8148,8172-8173,8176,8185,8196,8198-8199,8242,8263,8284,8298,8302,8375,8380,8447-8452,8470-8471,8473,8497,8499,8507-8508,8513,8563,8581,8587,8592,8599,8636,8666,8675,8687,8701,8707-8708,8719,8746,8755,8778,8795,8826,8890-8891,8928-8929,8931,8957,8962,8965,8967,8986,8994,9031-9032,9039,9046,9084,9157,9244,9246,9325,9329-9330,9332,9336-9337
Modified: branches/8.0.3/gui/middleware/notifier.py
===================================================================
--- branches/8.0.3/gui/middleware/notifier.py 2011-12-28 19:25:17 UTC (rev 9338)
+++ branches/8.0.3/gui/middleware/notifier.py 2011-12-28 19:26:35 UTC (rev 9339)
@@ -1179,6 +1179,8 @@
hash, and the encrypted SMB password hash.
Raises:
+ MiddlewareError - tried to create a home directory under a
+ subdirectory on the /mnt memory disk.
MiddlewareError - failed to create the home directory for
the user.
MiddlewareError - failed to run pw useradd successfully.
@@ -1216,6 +1218,14 @@
# too late to roll back the user create.
try:
os.makedirs(homedir, mode=homedir_mode)
+ if os.stat(homedir).st_dev == os.stat('/mnt').st_dev:
+ # HACK: ensure the user doesn't put their homedir under
+ # /mnt
+ # XXX: fix the GUI code and elsewhere to enforce this, then
+ # remove the hack.
+ raise MiddlewareError('Path for the home directory (%s) '
+ 'must be under a volume or dataset'
+ % (homedir, ))
except OSError as oe:
if oe.errno == errno.EEXIST:
if not os.path.isdir(homedir):
@@ -1223,7 +1233,8 @@
'exists and is not a directory')
else:
raise MiddlewareError('Failed to create the home directory '
- 'for user: %s' % (homedir, ))
+ '(%s) for user: %s'
+ % (homedir, str(oe)))
else:
new_homedir = True
Property changes on: branches/8.0.3/gui/middleware/notifier.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/8.1/gui/middleware/notifier.py:6033-6383
/branches/feedback/gui/middleware/notifier.py:6189-6347
/experimental/ix-8.2/gui/middleware/notifier.py:5657-5682
/trunk/gui/middleware/notifier.py:7248,7262,7349-7361,7363,7371,7375,7381,7383,7385-7392,7395,7398,7402-7405,7426,7440,7444,7450,7452,7454,7491,7520,7541,7546,7603,7608,7633,7641,7649,7858,7909,7952,8269,8302,8380,8931,9284,9325,9329
+ /branches/8.1/gui/middleware/notifier.py:6033-6383
/branches/feedback/gui/middleware/notifier.py:6189-6347
/experimental/ix-8.2/gui/middleware/notifier.py:5657-5682
/trunk/gui/middleware/notifier.py:7248,7262,7349-7361,7363,7371,7375,7381,7383,7385-7392,7395,7398,7402-7405,7426,7440,7444,7450,7452,7454,7491,7520,7541,7546,7603,7608,7633,7641,7649,7858,7909,7952,8269,8302,8380,8931,9284,9325,9329,9336-9337
Copied: branches/8.0.3/gui/services/migrations/0053_auto__add_field_cifs_cifs_srv_zeroconf.py (from rev 9157, trunk/gui/services/migrations/0053_auto__add_field_cifs_cifs_srv_zeroconf.py)
===================================================================
--- branches/8.0.3/gui/services/migrations/0053_auto__add_field_cifs_cifs_srv_zeroconf.py (rev 0)
+++ branches/8.0.3/gui/services/migrations/0053_auto__add_field_cifs_cifs_srv_zeroconf.py 2011-12-28 19:26:35 UTC (rev 9339)
@@ -0,0 +1,316 @@
+# encoding: 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 'CIFS.cifs_srv_zeroconf'
+ db.add_column('services_cifs', 'cifs_srv_zeroconf', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'CIFS.cifs_srv_zeroconf'
+ db.delete_column('services_cifs', 'cifs_srv_zeroconf')
+
+
+ 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'}),
+ 'ad_domainname': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ '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': ('freeadmin.models.UserField', [], {'default': "'nobody'", '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': 'True'}),
+ 'cifs_srv_aio_rs': ('django.db.models.fields.IntegerField', [], {'default': '1', 'max_length': '120'}),
+ 'cifs_srv_aio_ws': ('django.db.models.fields.IntegerField', [], {'default': '1', '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': ('freeadmin.models.UserField', [], {'default': "'nobody'", 'max_length': '120'}),
+ 'cifs_srv_guestok': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_guestonly': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cifs_srv_homedir': ('freeadmin.models.PathField', [], {'max_length': '255', 'null': 'True', '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_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': "'Minimum'", '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', [], {'max_length': '120', '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': ('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.IPAddressField', [], {'max_length': '15', '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_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', [], {'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': {'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.IPAddressField', [], {'default': "'255.255.255.0'", 'max_length': '15', 'blank': 'True'}),
+ 'iscsi_lucip': ('django.db.models.fields.IPAddressField', [], {'default': "'127.0.0.1'", 'max_length': '15', 'blank': 'True'}),
+ 'iscsi_lucport': ('django.db.models.fields.IntegerField', [], {'default': '3261', 'max_length': '120', '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_listen': ('django.db.models.fields.TextField', [], {'default': "'0.0.0.0:3260'", 'max_length': '120'}),
+ 'iscsi_target_portal_tag': ('django.db.models.fields.IntegerField', [], {'default': '1', 'max_length': '120'})
+ },
+ '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_async': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'nfs_srv_servers': ('django.db.models.fields.PositiveIntegerField', [], {'default': '4'})
+ },
+ 'services.plugins': {
+ 'Meta': {'object_name': 'Plugins'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'jail_interface': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'jail_ip': ('django.db.models.fields.IPAddressField', [], {'default': "''", 'max_length': '15', 'blank': 'True'}),
+ 'jail_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '120', 'blank': 'True'}),
+ 'jail_netmask': ('django.db.models.fields.IPAddressField', [], {'default': "''", 'max_length': '15', 'blank': 'True'}),
+ 'jail_path': ('freeadmin.models.PathField', [], {'default': "''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'plugins_path': ('freeadmin.models.PathField', [], {'default': "''", 'max_length': '255', 'null': 'True', 'blank': 'True'})
+ },
+ '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': {'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'}),
+ 'rsyncmod_group': ('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': ('freeadmin.models.PathField', [], {'max_length': '255'}),
+ 'rsyncmod_user': ('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_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': ('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': ('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']
Modified: branches/8.0.3/gui/services/models.py
===================================================================
--- branches/8.0.3/gui/services/models.py 2011-12-28 19:25:17 UTC (rev 9338)
+++ branches/8.0.3/gui/services/models.py 2011-12-28 19:26:35 UTC (rev 9339)
@@ -168,6 +168,11 @@
help_text=_("Samba will write asynchronously if request size is larger than this value. The default write size is 1."),
default = 1,
)
+ cifs_srv_zeroconf = models.BooleanField(
+ verbose_name=_("Zeroconf share discovery"),
+ default=True,
+ help_text=_("Zeroconf support via Avahi allows clients (the Mac OSX finder in particular) to automatically discover the CIFS shares on the system similar to the Computer Browser service in Windows."),
+ )
class Meta:
verbose_name = _(u"CIFS")
Modified: branches/8.0.3/nanobsd/Files/etc/rc.conf.local
===================================================================
--- branches/8.0.3/nanobsd/Files/etc/rc.conf.local 2011-12-28 19:25:17 UTC (rev 9338)
+++ branches/8.0.3/nanobsd/Files/etc/rc.conf.local 2011-12-28 19:26:35 UTC (rev 9339)
@@ -271,9 +271,21 @@
_bool_svcconfig inadyn_enable dynamicdns
_bool_svcconfig smartd_enable smartd
- _count_config avahi_daemon_enable services_services "(srv_service='cifs' OR srv_service='afp')" " AND srv_enable=1"
- _count_config dbus_enable services_services "(srv_service='cifs' OR srv_service='afp')" " AND srv_enable=1"
+ local _avahi_srv_enable
+ if srv_enabled afp; then
+ _avahi_srv_enable=true
+ elif srv_enabled cifs && [ "x$(${FREENAS_SQLITE_CMD} ${FREENAS_CONFIG} "SELECT cifs_srv_zeroconf FROM services_cifs")" = x1 ]; then
+ _avahi_srv_enable=true
+ else
+ _avahi_srv_enable=false
+ fi
+
+ if $_avahi_srv_enable; then
+ echo "avahi_daemon_enable=\"YES\""
+ echo "dbus_enable=\"YES\""
+ fi
+
_nut_config
# Workaround: we don't enable ZFS by default but still want /etc/zfs/exports
Modified: branches/8.0.3/nanobsd/Files/etc/rc.d/ix-samba
===================================================================
--- branches/8.0.3/nanobsd/Files/etc/rc.d/ix-samba 2011-12-28 19:25:17 UTC (rev 9338)
+++ branches/8.0.3/nanobsd/Files/etc/rc.d/ix-samba 2011-12-28 19:26:35 UTC (rev 9339)
@@ -519,7 +519,9 @@
local samba_enabled
samba_enabled=$(${FREENAS_SQLITE_CMD} ${FREENAS_CONFIG} "SELECT srv_enable from services_services where srv_service = 'cifs'" 2>/dev/null || echo 0)
- if [ "x$samba_enabled" = x1 ]; then
+ [ "x$samba_enabled" = x1 ] && \
+ [ "x$(${FREENAS_SQLITE_CMD} ${FREENAS_CONFIG} "SELECT cifs_srv_zeroconf FROM services_cifs")" = x1 ]
+ if [ $? -eq 0 ]; then
cat > ${AVAHI_CIFS_SERVICE} <<EOF
<?xml version="1.0" standalone="no"?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|