Skip to content

Commit

Permalink
Add per share afp auxiliary parameters.
Browse files Browse the repository at this point in the history
Ticket: #16563
Ticket: #10367
  • Loading branch information
Suraj Ravichandran committed Nov 29, 2016
1 parent d38c73a commit 3ae6cbf
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 0 deletions.
110 changes: 110 additions & 0 deletions gui/sharing/migrations/0035_auto__add_field_afp_share_afp_auxparams.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as 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 'AFP_Share.afp_auxparams'
db.add_column(u'sharing_afp_share', 'afp_auxparams',
self.gf('django.db.models.fields.TextField')(default='', max_length=255, blank=True),
keep_default=False)


def backwards(self, orm):
# Deleting field 'AFP_Share.afp_auxparams'
db.delete_column(u'sharing_afp_share', 'afp_auxparams')


models = {
u'sharing.afp_share': {
'Meta': {'ordering': "['afp_name']", 'object_name': 'AFP_Share'},
'afp_allow': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_auxparams': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'afp_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_deny': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_dperm': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '3'}),
'afp_fperm': ('django.db.models.fields.CharField', [], {'default': "'644'", 'max_length': '3'}),
'afp_hostsallow': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_hostsdeny': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
'afp_nodev': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'afp_nostat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'afp_path': ('freenasUI.freeadmin.models.fields.PathField', [], {'max_length': '255'}),
'afp_ro': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_rw': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'afp_timemachine': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'afp_umask': ('django.db.models.fields.CharField', [], {'default': "'000'", 'max_length': '3', 'blank': 'True'}),
'afp_upriv': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'sharing.cifs_share': {
'Meta': {'ordering': "['cifs_name']", 'object_name': 'CIFS_Share'},
'cifs_auxsmbconf': ('django.db.models.fields.TextField', [], {'max_length': '120', 'blank': 'True'}),
'cifs_browsable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'cifs_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'cifs_default_permissions': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'cifs_guestok': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_guestonly': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_home': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_hostsallow': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'cifs_hostsdeny': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'cifs_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
'cifs_path': ('freenasUI.freeadmin.models.fields.PathField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'cifs_recyclebin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_ro': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_showhiddenfiles': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'cifs_storage_task': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['storage.Task']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
'cifs_vfsobjects': ('freenasUI.freeadmin.models.fields.MultiSelectField', [], {'default': "'streams_xattr,aio_pthread'", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'sharing.nfs_share': {
'Meta': {'object_name': 'NFS_Share'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'nfs_alldirs': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'nfs_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'nfs_hosts': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'nfs_mapall_group': ('freenasUI.freeadmin.models.fields.GroupField', [], {'default': "''", 'max_length': '120', 'null': 'True', 'blank': 'True'}),
'nfs_mapall_user': ('freenasUI.freeadmin.models.fields.UserField', [], {'default': "''", 'max_length': '120', 'null': 'True', 'blank': 'True'}),
'nfs_maproot_group': ('freenasUI.freeadmin.models.fields.GroupField', [], {'default': "''", 'max_length': '120', 'null': 'True', 'blank': 'True'}),
'nfs_maproot_user': ('freenasUI.freeadmin.models.fields.UserField', [], {'default': "''", 'max_length': '120', 'null': 'True', 'blank': 'True'}),
'nfs_network': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'nfs_quiet': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'nfs_ro': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'nfs_security': ('freenasUI.freeadmin.models.fields.MultiSelectField', [], {'max_length': '200', 'blank': 'True'})
},
u'sharing.nfs_share_path': {
'Meta': {'ordering': "['path']", 'object_name': 'NFS_Share_Path'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'path': ('freenasUI.freeadmin.models.fields.PathField', [], {'max_length': '255'}),
'share': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'paths'", 'to': u"orm['sharing.NFS_Share']"})
},
u'sharing.webdav_share': {
'Meta': {'ordering': "['webdav_name']", 'object_name': 'WebDAV_Share'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'webdav_comment': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
'webdav_name': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
'webdav_path': ('freenasUI.freeadmin.models.fields.PathField', [], {'max_length': '255'}),
'webdav_perm': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'webdav_ro': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'storage.task': {
'Meta': {'ordering': "['task_filesystem']", 'object_name': 'Task'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'task_begin': ('django.db.models.fields.TimeField', [], {'default': 'datetime.time(9, 0)'}),
'task_byweekday': ('django.db.models.fields.CharField', [], {'default': "'1,2,3,4,5'", 'max_length': '120', 'blank': 'True'}),
'task_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'task_end': ('django.db.models.fields.TimeField', [], {'default': 'datetime.time(18, 0)'}),
'task_filesystem': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
'task_interval': ('django.db.models.fields.PositiveIntegerField', [], {'default': '60', 'max_length': '120'}),
'task_recursive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'task_repeat_unit': ('django.db.models.fields.CharField', [], {'default': "'weekly'", 'max_length': '120'}),
'task_ret_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '2'}),
'task_ret_unit': ('django.db.models.fields.CharField', [], {'default': "'week'", 'max_length': '120'})
}
}

complete_apps = ['sharing']
10 changes: 10 additions & 0 deletions gui/sharing/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,16 @@ class AFP_Share(Model):
verbose_name=_("Hosts Deny")
)

afp_auxparams = models.TextField(
blank=True,
max_length=255,
help_text=_(
"These parameters are added to the [Volume] section of afp.conf."
" Add each different parameter on a newline"
),
verbose_name=_("Auxiliary Parameters")
)

def __unicode__(self):
return unicode(self.afp_name)

Expand Down
7 changes: 7 additions & 0 deletions src/freenas/usr/local/libexec/nas/generate_afpd_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,13 @@ def main():
cf_contents.append("\tveto files = .windows/.mac/\n")
if map_acls_mode:
cf_contents.append("\tacls = yes\n")
# Do not fail if aux params are not properly entered by the user
try:
aux_params = ["\t{0}\n".format(p.encode('utf8')) for p in share.afp_auxparams.split("\n")]
except:
pass
else:
cf_contents += aux_params

with open(afp_config, "w") as fh:
for line in cf_contents:
Expand Down

0 comments on commit 3ae6cbf

Please sign in to comment.