def view_nfs_share(request):
  return_dict = {}
  try:
    path = request.GET['path']
    template = 'logged_in_error.html'
    if not path:
      raise Exception("No path specified. Please use the menus.")
    exports_list, err = nfs.load_exports_list()
    if err:
      raise Exception(err)
    if not exports_list:
      raise Exception('Error loading NFS exports information')
    found = False
    for e in exports_list:
      if e['path'] == path:
        found = True
        return_dict['share_info'] = e
        break
    if not found:
      raise Exception("Requested share not found.")
  
    if not "error" in return_dict:
      template = "view_nfs_share.html"
    return django.shortcuts.render_to_response(template, return_dict, context_instance = django.template.context.RequestContext(request))
  except Exception, e:
    return_dict['base_template'] = "networking_base.html"
    return_dict["page_title"] = 'View NFS share details'
    return_dict['tab'] = 'view_nfs_shares_tab'
    return_dict["error"] = 'Error viewing NFS share details'
    return_dict["error_details"] = str(e)
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def view_nfs_share(request):
  return_dict = {}
  try:
    path = request.GET['path']
    template = 'logged_in_error.html'
    if not path:
      return_dict["error"] = "Error loading NFS share - no path specified. Please use the menus."
    exports_list, err = nfs.load_exports_list()
    if not exports_list:
      return_dict["error"] = "Error loading NFS exports information : "
      if err:
        return_dict["error"] += err
    found = False
    print exports_list
    for e in exports_list:
      if e['path'] == path:
        found = True
        return_dict['share_info'] = e
        break
    if not found:
      return_dict["error"] = "Error loading NFS share information : Requested share not found."
  
    if not "error" in return_dict:
      template = "view_nfs_share.html"
    return django.shortcuts.render_to_response(template, return_dict, context_instance = django.template.context.RequestContext(request))
  except Exception, e:
    s = str(e)
    return_dict["error"] = "An error occurred when processing your request : %s"%s
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def view_nfs_shares(request):
  return_dict = {}
  try:
    exports_list, err = nfs.load_exports_list()
    if not exports_list and err:
      raise Exception(err)
  
    if "action" in request.GET:
      if request.GET["action"] == "saved":
        conf = "NFS Export information successfully updated"
      elif request.GET["action"] == "created":
        conf = "NFS Export successfully created"
      elif request.GET["action"] == "deleted":
        conf = "NFS Export successfully deleted"
      return_dict["conf"] = conf
    return_dict["exports_list"] = exports_list
    template = "view_nfs_shares.html"
    return django.shortcuts.render_to_response(template, return_dict, context_instance = django.template.context.RequestContext(request))
  except Exception, e:
    return_dict['base_template'] = "shares_base.html"
    return_dict["page_title"] = 'NFS shares'
    return_dict['tab'] = 'view_nfs_shares_tab'
    return_dict["error"] = 'Error loading NFS shares'
    return_dict["error_details"] = str(e)
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
Example #4
0
def view_nfs_shares(request):
    return_dict = {}
    try:
        exports_list, err = nfs.load_exports_list()
        if not exports_list and err:
            raise Exception(err)

        if "ack" in request.GET:
            if request.GET["ack"] == "saved":
                return_dict[
                    'ack_message'] = "NFS Export information successfully updated"
            elif request.GET["ack"] == "created":
                return_dict['ack_message'] = "NFS Export successfully created"
            elif request.GET["ack"] == "deleted":
                return_dict['ack_message'] = "NFS Export successfully deleted"
        return_dict["exports_list"] = exports_list
        template = "view_nfs_shares.html"
        return django.shortcuts.render_to_response(
            template,
            return_dict,
            context_instance=django.template.context.RequestContext(request))
    except Exception, e:
        return_dict['base_template'] = "shares_base.html"
        return_dict["page_title"] = 'NFS shares'
        return_dict['tab'] = 'view_nfs_shares_tab'
        return_dict["error"] = 'Error loading NFS shares'
        return_dict["error_details"] = str(e)
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))
def delete_dir(request):
  return_dict = {}
  try:
    if 'path' not in request.REQUEST:
      raise Exception('Invalid request. Please use the menus')
    path = request.REQUEST['path']
    pools, err = zfs.get_pools() 
    ds_list = [] 
    for pool in pools:
      if pool['properties']['mountpoint']['value'] == path:
        raise Exception('The selected directory is the mountpoint of a pool and so cannot be deleted.')
      for ds in pool["datasets"]:
        if ds['properties']['type']['value'] == 'filesystem':
          if ds['properties']['mountpoint']['value'] == path:
            raise Exception('The selected directory is the mountpoint of a dataset and so cannot be deleted.')
    if request.method == "GET":
      if 'path' not in request.GET:
        raise Exception('No directory specified')
      initial = {}
      initial['path'] = request.GET['path']
      form = folder_management_forms.DirForm(initial=initial)
      return_dict['form'] = form
      return django.shortcuts.render_to_response('delete_dir_conf.html', return_dict, context_instance=django.template.context.RequestContext(request))
    else:
      form = folder_management_forms.DirForm(request.POST)
      if form.is_valid():
        cd = form.cleaned_data
        path = cd['path']
        if not os.path.exists(path):
          raise Exception('The specified directory does not exist!')

        if len(path.split("/")) < 2:
          raise Exception('Cannot delete specified directory - Invalid path')

        # Need to also check if the path is a share or not. If share, dont delete again.
        # Checking NFS
        exports,err = nfs.load_exports_list()
        if exports:
          for export in exports: 
            #print id(export["path"]),id(path)
            if export["path"] == path:
              raise Exception('Cannot delete the specified directory as it is path of an NFS share')
              
        shutil.rmtree(path,ignore_errors=True)
        audit_str = "Deleted directory '%s'" %path
        audit.audit("delete_dir", audit_str, request.META)

        return django.http.HttpResponseRedirect('/dir_manager/?ack=deleted_dir')
      else:
        raise Exception('Could not delete the specified directory as there was an error in the specified parameters.')
  except Exception, e:
    return_dict['base_template'] = "storage_base.html"
    return_dict["page_title"] = 'Delete a directory'
    return_dict['tab'] = 'dir_permissions_tab'
    return_dict["error"] = 'Error deleting directory'
    return_dict["error_details"] = str(e)
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
Example #6
0
def view_nfs_share(request):
    return_dict = {}
    try:
        path = request.GET['path']
        template = 'logged_in_error.html'
        if not path:
            raise Exception("No path specified. Please use the menus.")
        exports_list, err = nfs.load_exports_list()
        if err:
            raise Exception(err)
        if not exports_list:
            raise Exception('Error loading NFS exports information')
        found = False
        for e in exports_list:
            if e['path'] == path:
                found = True
                return_dict['share_info'] = e
                break
        if not found:
            raise Exception("Requested share not found.")

        if not "error" in return_dict:
            template = "view_nfs_share.html"
        return django.shortcuts.render_to_response(
            template,
            return_dict,
            context_instance=django.template.context.RequestContext(request))
    except Exception, e:
        return_dict['base_template'] = "networking_base.html"
        return_dict["page_title"] = 'View NFS share details'
        return_dict['tab'] = 'view_nfs_shares_tab'
        return_dict["error"] = 'Error viewing NFS share details'
        return_dict["error_details"] = str(e)
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))
def view_nfs_shares(request):
  return_dict = {}
  try:
    template = 'logged_in_error.html'
    exports_list, err = nfs.load_exports_list()
    if not exports_list and err:
      return_dict["error"] = "Error loading NFS shares information : %s"%err
  
    if not "error" in return_dict:
      if "action" in request.GET:
        if request.GET["action"] == "saved":
          conf = "NFS Export information successfully updated"
        elif request.GET["action"] == "created":
          conf = "NFS Export successfully created"
        elif request.GET["action"] == "deleted":
          conf = "NFS Export successfully deleted"
        return_dict["conf"] = conf
      return_dict["exports_list"] = exports_list
      template = "view_nfs_shares.html"
    return django.shortcuts.render_to_response(template, return_dict, context_instance = django.template.context.RequestContext(request))
  except Exception, e:
    s = str(e)
    return_dict["error"] = "An error occurred when processing your request : %s"%s
    return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
Example #8
0
def dashboard(request, page):
    return_dict = {}

    try:
        return_dict["page_title"] = 'Overall system health'
        return_dict['tab'] = 'system_health_tab'
        return_dict["error"] = 'Error loading system health data'

        if request.method != 'GET':
            raise Exception('Invalid access method. Please use the menus')
        si, err = system_info.load_system_config()
        if err:
            raise Exception(err)
        if not si:
            raise Exception('Error loading system configuration')

        node = si[si.keys()[0]]
        return_dict['node'] = node
        #print node.keys()

        #By default show error page
        template = "logged_in_error.html"

        # Chart specific declarations
        todays_date = (datetime.date.today()).strftime(
            '%02d')  # will return 02, instead of 2.
        start_hour = '%02d' % (datetime.datetime.today().hour - 3)
        end_hour = '%02d' % (datetime.datetime.today().hour)
        minute = '%02d' % (datetime.datetime.today().minute)
        start = str(start_hour) + ":" + str(minute) + str(":10")
        end = str(end_hour) + ":" + str(minute) + str(":40")

        value_list = []
        time_list = []
        use_salt, err = common.use_salt()
        if err:
            raise Exception(err)

        num_bad_disks = 0
        num_hw_raid_bad_disks = 0
        num_hw_raid_ctrl_disks = 0
        num_smart_ctrl_disks = 0
        num_disks = len(node['disks'])
        disks_ok = True
        disks_hw_ok = "N.A"
        for sn, disk in node['disks'].items():
            if 'status' in disk:
                if 'hw_raid' in disk:
                    if not disk['hw_raid']:
                        num_smart_ctrl_disks += 1
                        if (disk['status'] is not None
                                and disk['status'].upper()
                                not in ['PASSED', 'OK']):
                            num_bad_disks += 1
                            disks_ok = False
                    else:
                        num_hw_raid_ctrl_disks += 1
                        if (disk['status'] is not None
                                and disk['status'].upper() != 'OK'):
                            num_hw_raid_bad_disks += 1
                            disks_ok = False
                else:
                    #Assume its a non raid disk
                    num_smart_ctrl_disks += 1
                    if (disk['status'] is not None and disk['status'].upper()
                            not in ['PASSED', 'OK']):
                        num_bad_disks += 1
                        disks_ok = False

        return_dict['num_disks'] = num_disks
        return_dict['num_bad_disks'] = num_bad_disks
        return_dict['disks_ok'] = disks_ok
        #return_dict['disks_hw_ok'] = disks_hw_ok
        return_dict['num_hw_raid_bad_disks'] = num_hw_raid_bad_disks
        return_dict['num_hw_raid_ctrl_disks'] = num_hw_raid_ctrl_disks
        return_dict['num_smart_ctrl_disks'] = num_smart_ctrl_disks

        if 'ipmi_status' in node:
            num_sensors = len(node['ipmi_status'])
            num_bad_sensors = 0
            ipmi_ok = True
            for sensor in node['ipmi_status']:
                if sensor['status'] in ['ok', 'nr', 'na']:
                    continue
                else:
                    num_bad_sensors += 1
                    ipmi_ok = False
            return_dict['num_sensors'] = num_sensors
            return_dict['num_bad_sensors'] = num_bad_sensors
            return_dict['ipmi_ok'] = ipmi_ok

        #services_list =  ['winbind', 'smb', 'nfs', 'tgtd', 'ntpd', 'vsftpd']

        services_dict, err = services_management.get_sysd_services_status()
        if err:
            raise Exception(err)
        num_services = len(services_dict)
        num_failed_services = 0
        num_active_services = 0
        num_inactive_services = 0
        services_ok = True

        if services_dict:
            #service = services_dict.keys ()
            for service in services_dict.keys():
                if services_dict[service]["info"]["status"][
                        "status_str"] == "Active":
                    num_active_services += 1
                elif services_dict[service]["info"]["status"][
                        "status_str"] == "Inactive":
                    num_inactive_services += 1
                elif services_dict[service]["info"]["status"][
                        "status_str"] == "Failed":
                    num_failed_services += 1
                    services_ok = False
                elif services_dict[service]["info"]["status"][
                        "status_str"] == "Unknown State":
                    num_failed_services += 1
                    services_ok = False
            return_dict['num_services'] = num_services
            return_dict['num_active_services'] = num_active_services
            return_dict['num_inactive_services'] = num_inactive_services
            return_dict['num_failed_services'] = num_failed_services
            return_dict['services_ok'] = services_ok
        else:
            raise Exception('Fetched services status list is empty')

        pools, err = zfs.get_pools()
        if err:
            raise Exception(err)

        info = si.keys()[0]
        num_pools = len(pools)
        num_bad_pools = 0
        num_degraded_pools = 0
        num_high_usage = 0
        for pool in pools:
            if pool['usage']['capacity']['value'] > 75:
                num_high_usage += 1
            if pool['config']['pool']['root']['status']['state'] == 'ONLINE':
                pass
            elif pool['config']['pool']['root']['status'][
                    'state'] == 'DEGRADED':
                num_degraded_pools += 1
            else:
                num_bad_pools += 1
        return_dict['num_pools'] = num_pools
        return_dict['num_bad_pools'] = num_bad_pools
        return_dict['num_degraded_pools'] = num_degraded_pools
        return_dict['num_high_usage'] = num_high_usage

        load_avg_ok = True
        if (node["load_avg"]["5_min"] > node["load_avg"]["cpu_cores"]) or (
                node["load_avg"]["15_min"] > node["load_avg"]["cpu_cores"]):
            load_avg_ok = False
        return_dict['load_avg_ok'] = load_avg_ok

        shares_list, err = cifs_common.load_shares_list()
        if err:
            raise Exception(err)
        return_dict['num_cifs_shares'] = len(shares_list)

        exports_list, err = nfs.load_exports_list()
        if err:
            raise Exception(err)
        return_dict['num_nfs_exports'] = len(exports_list)

        target_list, err = iscsi_stgt.get_targets()
        if err:
            raise Exception(err)
        return_dict['num_iscsi_targets'] = len(target_list)

        with open('/proc/uptime', 'r') as f:
            uptime_seconds = float(f.readline().split()[0])
            uptime_str = '%s hours' % (':'.join(
                str(timedelta(seconds=uptime_seconds)).split(':')[:2]))
            return_dict['uptime_str'] = uptime_str

        # CPU status
        if page == "cpu":
            return_dict["page_title"] = 'CPU statistics'
            return_dict['tab'] = 'cpu_tab'
            return_dict["error"] = 'Error loading CPU statistics'
            cpu, err = stats.get_system_stats(todays_date, start, end, "cpu")
            if err:
                raise Exception(err)
            value_dict = {}
            if cpu:
                for key in cpu.keys():
                    value_list = []
                    time_list = []
                    if key == "date":
                        pass
                    else:
                        if cpu[key]:
                            for a in cpu[key]:
                                time_list.append(a[0])
                                value_list.append(a[1])
                        value_dict[key] = value_list
            return_dict["data_dict"] = value_dict
            queue, err = stats.get_system_stats(todays_date, start, end,
                                                "queue")
            if err:
                raise Exception(err)
            value_dict = {}
            if queue:
                for key in queue.keys():
                    value_list = []
                    time_list = []
                    if key == "date":
                        pass
                    else:
                        for a in queue[key]:
                            time_list.append(a[0])
                            value_list.append(a[1])
                        value_dict[key] = value_list
            return_dict["data_dict_queue"] = value_dict
            return_dict['node_name'] = info
            return_dict['node'] = si[info]
            d = {}
            template = "view_cpu_status.html"
        elif page == "dashboard":
            return_dict["page_title"] = 'Overall system health'
            return_dict['tab'] = 'system_health_tab'
            return_dict["error"] = 'Error loading system health data'
            template = "dashboard_system_health.html"
            hw_platform, err = common.get_hardware_platform()
            if hw_platform:
                return_dict['hw_platform'] = hw_platform
                if hw_platform == 'dell':
                    from integralstor_common.platforms import dell
                    idrac_url, err = dell.get_idrac_addr()
                    if idrac_url:
                        return_dict['idrac_url'] = idrac_url
        # Hardware
        elif page == "hardware":
            return_dict["page_title"] = 'Hardware status'
            return_dict['tab'] = 'hardware_tab'
            return_dict["error"] = 'Error loading hardware status'
            d = {}
            if 'ipmi_status' in si[info]:
                d['ipmi_status'] = si[info]['ipmi_status']
                return_dict['hardware_status'] = d
            return_dict['node_name'] = info
            template = "view_hardware_status.html"
        # Memory
        elif page == "memory":
            return_dict["page_title"] = 'Memory statistics'
            return_dict['tab'] = 'memory_tab'
            return_dict["error"] = 'Error loading memory statistics'
            mem, err = stats.get_system_stats(todays_date, start, end,
                                              "memory")
            if err:
                raise Exception(err)
            if mem:
                for a in mem["memused"]:
                    time_list.append(a[0])
                    value_list.append((a[1] / (1024 * 1024)))
            return_dict['memory_status'] = si[info]['memory']
            template = "view_memory_status.html"
        # Network
        elif page == "network":
            return_dict["page_title"] = 'Network statistics'
            return_dict['tab'] = 'network_tab'
            return_dict["error"] = 'Error loading Network statistics'
            network, err = stats.get_system_stats(todays_date, start, end,
                                                  "network")
            if err:
                raise Exception(err)
            value_dict = {}
            if network:
                for key in network.keys():
                    value_list = []
                    time_list = []
                    if key == "date" or key == "lo":
                        pass
                    else:
                        for a in network[key]["ifutil-percent"]:
                            time_list.append(a[0])
                            value_list.append(a[1])
                        value_dict[key] = value_list

            return_dict["data_dict"] = value_dict
            return_dict["network_status"] = si[info]['interfaces']
            template = "view_network_status.html"
        # Services
        elif page == "services":
            return_dict["page_title"] = 'System services status'
            return_dict['tab'] = 'services_tab'
            return_dict["error"] = 'Error loading system services status'
            return_dict['services_status'] = {}
            if use_salt:
                import salt.client
                client = salt.client.LocalClient()
                winbind = client.cmd(info, 'cmd.run',
                                     ['service winbind status'])
                smb = client.cmd(info, 'cmd.run', ['service smb status'])
                nfss = client.cmd(info, 'cmd.run', ['service nfs status'])
                iscsi = client.cmd(info, 'cmd.run', ['service tgtd status'])
                ntp = client.cmd(info, 'cmd.run', ['service ntpd status'])
                ftp = client.cmd(info, 'cmd.run', ['service vsftpd status'])
                return_dict['services_status']['winbind'] = winbind[info]
                return_dict['services_status']['smb'] = smb[info]
                return_dict['services_status']['nfs'] = nfss[info]
                return_dict['services_status']['iscsi'] = iscsi[info]
                return_dict['services_status']['ntp'] = ntp[info]
                return_dict['services_status']['ftp'] = ftp[info]
            else:
                """
        services_list, err = services_management.get_sysd_services_status ()
        if err:
          raise Exception (err)
        if services_list:
          #for service in services_list:
          return_dict['services_status'] = services_list  
        else:
          raise Exception ('Fetched services status list is empty')
        """

                out_list, err = command.get_command_output(
                    'service winbind status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['winbind'] = ' '.join(
                        out_list)

                out_list, err = command.get_command_output(
                    'service smb status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['smb'] = ' '.join(out_list)

                out_list, err = command.get_command_output(
                    'service nfs status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['nfs'] = ' '.join(out_list)

                out_list, err = command.get_command_output(
                    'service tgtd status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['iscsi'] = ' '.join(
                        out_list)

                out_list, err = command.get_command_output(
                    'service ntpd status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['ntp'] = ' '.join(out_list)

                out_list, err = command.get_command_output(
                    'service vsftpd status', False)
                if err:
                    raise Exception(err)
                if out_list:
                    return_dict['services_status']['ftp'] = ' '.join(out_list)

            template = "view_services_status.html"
        # Disks
        elif page == "disks":
            return_dict["page_title"] = 'Hard drives status'
            return_dict['tab'] = 'disk_tab'
            return_dict["error"] = 'Error loading hard drives status'
            return_dict['node'] = si[info]
            return_dict["disk_status"] = si[info]['disks']
            #print si[info]['disks']
            return_dict['node_name'] = info
            template = "view_disks_status.html"
        # Pools
        elif page == "pools":
            return_dict["page_title"] = 'ZFS pools status'
            return_dict['tab'] = 'pools_tab'
            return_dict["error"] = 'Error loading ZFS pools status'
            pools, err = zfs.get_pools()
            if err:
                raise Exception(err)
            if pools:
                return_dict['pools'] = pools
            template = "view_pools_status.html"
        return_dict["labels"] = time_list
        return_dict["data"] = value_list
        return django.shortcuts.render_to_response(
            template,
            return_dict,
            context_instance=django.template.context.RequestContext(request))
    except Exception, e:
        return_dict['base_template'] = "dashboard_base.html"

        return_dict["error_details"] = e
        return django.shortcuts.render_to_response(
            "logged_in_error.html",
            return_dict,
            context_instance=django.template.context.RequestContext(request))
def modify_dir_permissions(request):
  return_dict = {}
  try:
    if not "error" in return_dict:
      if "ack" in request.GET:
        if request.GET["ack"] == "ace_deleted":
          return_dict['ack_message'] = "ACL entry successfully removed"
        elif request.GET["ack"] == "aces_added":
          return_dict['ack_message'] = "ACL entries successfully added"
        elif request.GET["ack"] == "aces_modified":
          return_dict['ack_message'] = "ACL entries successfully modified"
        elif request.GET["ack"] == "created_dir":
          return_dict['ack_message'] = "Directory successfully created"
        elif request.GET["ack"] == "deleted_dir":
          return_dict['ack_message'] = "Directory successfully deleted"
    users, err = local_users.get_local_users()
    if err:
      raise Exception('Error retrieving local user list : %s'%err)
    if not users:
      raise Exception('No local users seem to be created. Please create at least one local user before performing this operation.')

    groups, err = local_users.get_local_groups()
    if err:
      raise Exception('Error retrieving local group list : %s'%err)
    if not groups:
      raise Exception('No local groups seem to be created. Please create at least one local group before performing this operation.')

    pools, err = zfs.get_pools() 
    ds_list = [] 
    for pool in pools:
      for ds in pool["datasets"]:
        if ds['properties']['type']['value'] == 'filesystem':
          ds_list.append(ds["name"])
    if not ds_list:
      raise Exception('No ZFS datasets available. Please create a dataset before creating shares.')

    if 'path' not in request.REQUEST:
      path = "/"+pools[0]["datasets"][0]["name"]
    else:
      path = request.REQUEST['path']
    try:
      stat_info = os.stat(path)
    except Exception, e:
      raise Exception('Error accessing specified path : %s'%str(e))
    uid = stat_info.st_uid
    gid = stat_info.st_gid
    username = pwd.getpwuid(uid)[0]
    grpname = grp.getgrgid(gid)[0]
    return_dict["username"] = username
    return_dict["grpname"] = grpname

    aces, err = acl.get_all_aces(path)
    if err:
      raise Exception(err)
    minimal_aces, err = acl.get_minimal_aces(aces)
    if err:
      raise Exception(err)
    user_aces, err = acl.get_ug_aces(aces, None, 'user')
    if err:
      raise Exception(err)
    group_aces, err = acl.get_ug_aces(aces, None, 'group')
    if err:
      raise Exception(err)

    return_dict['aces'] = aces
    return_dict['minimal_aces'] = minimal_aces
    if user_aces:
      return_dict['user_aces'] = user_aces
    if group_aces:
      return_dict['group_aces'] = group_aces
    
    return_dict['path'] = path
    return_dict["dataset"] = ds_list
    if request.method == "GET":
      # Shd be an edit request
  
      # Set initial form values
      initial = {}
      initial['path'] = path
      initial['owner_read'] = _owner_readable(stat_info)
      initial['owner_write'] = _owner_writeable(stat_info)
      initial['owner_execute'] = _owner_executeable(stat_info)
      initial['group_read'] = _group_readable(stat_info)
      initial['group_write'] = _group_writeable(stat_info)
      initial['group_execute'] = _group_executeable(stat_info)
      initial['other_read'] = _other_readable(stat_info)
      initial['other_write'] = _other_writeable(stat_info)
      initial['other_execute'] = _other_executeable(stat_info)
      if 'dataset' in request.GET:
        initial['dataset'] = request.GET['dataset']
  
      form = folder_management_forms.SetFileOwnerAndPermissionsForm(initial = initial, user_list = users, group_list = groups)
  
      return_dict["form"] = form
      return django.shortcuts.render_to_response('modify_dir_permissions.html', return_dict, context_instance=django.template.context.RequestContext(request))
  
    elif request.method == "POST":
      path = request.POST.get("path")
      # Shd be an save request
      if request.POST.get("action") == "add_folder":
        folder_name = request.POST.get("new_folder_name")
        directory = path +"/"+folder_name
        if not os.path.exists(directory):
          os.makedirs(directory)
          audit_str = "Creating %s" %directory
          audit.audit("modify_dir_owner_permissions", audit_str, request.META)
      elif request.POST.get("action") == "delete_folder":
        delete = "false"
        if len(path.split("/")) > 2:
          delete = "true"
        # Need to also check if the path is a share or not. If share, dont delete again.
        # Checking NFS
        exports,err = nfs.load_exports_list()
        if exports:
          for export in exports: 
            print id(export["path"]),id(path)
            if export["path"] == path:
              delete = "false"
              break
            else: 
              delete = "true"
              
        if delete:
          print delete
          #shutil.rmtree(path,ignore_errors=True)
          audit_str = "Deleting directory %s" %path
          audit.audit("modify_dir_owner_permissions", audit_str, request.META)
        else:
          raise Exception("Cannot delete folder. It is either a dataset of a share")
      else:
        form = common_forms.SetFileOwnerAndPermissionsForm(request.POST, user_list = users, group_list = groups)
        return_dict["form"] = form
        if form.is_valid():
          cd = form.cleaned_data
          ret, err = file_processing.set_dir_ownership_and_permissions(cd)
          if not ret:
            if err:
              raise Exception(err)
            else:
              raise Exception("Error setting directory ownership/permissions.")
  
          audit_str = "Modified directory ownsership/permissions for %s"%cd["path"]
          audit.audit("modify_dir_owner_permissions", audit_str, request.META)
  
      return django.http.HttpResponseRedirect('/modify_dir_permissions/?ack=set_permissions')
  
    else:
      return django.shortcuts.render_to_response('modify_dir_permissions.html', return_dict, context_instance=django.template.context.RequestContext(request))