1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00
samba-mirror/source4/param/share.h
Andrew Tridgell b540bc85ff r23696: added the create mask and related share permissions options to Samba4,
using the new share_int_option() code from Simo

speaking of which, this is the first time I've looked closely at the
share_classic.c code. It is absolutely and completely braindead and
broken. Whatever drugs Simo was on at the time, he better not try to
cross a border with them on him!

Problems with it:

 - if you actually set a value, it gets ignored, and the defvalue gets
   used instead ('ret' is never returned). If you don't set a value,
   then defvalue gets returned too. Sound useful?

 - it means we now have to list parameters in source/param/ in lots
   and lots of places, all of which have to match exactly. code like
   this is supposed to reduce the likelyhood of errors, not increase
   it!

 - code which has a long line of if() statements with strcmp() should
   cause your fingers to burn on the keyboard when you type it
   in. That's what structure lists are for. Strangely enough, we have
   all the info in loadparm.c in a structure list, but instead it gets
   replicated in share_classic.c in this strange if() strcmp() form

expect some changes to this code shortly. I'll need a calming cup of
tea first though :-)
(This used to be commit 19a9fc2f44)
2007-10-10 14:59:03 -05:00

131 lines
4.0 KiB
C

/*
Unix SMB/CIFS implementation.
Modular services configuration
Copyright (C) Simo Sorce 2006
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _SHARE_H
#define _SHARE_H
struct share_ops;
struct share_context {
const struct share_ops *ops;
void *priv_data;
};
struct share_config {
const char *name;
struct share_context *ctx;
void *opaque;
};
enum share_info_type {
SHARE_INFO_STRING,
SHARE_INFO_INT,
SHARE_INFO_BLOB
};
struct share_info {
enum share_info_type type;
const char *name;
void *value;
};
struct share_ops {
const char *name;
NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct share_context **);
const char *(*string_option)(struct share_config *, const char *, const char *);
int (*int_option)(struct share_config *, const char *, int);
BOOL (*bool_option)(struct share_config *, const char *, BOOL);
const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
NTSTATUS (*create)(struct share_context *, const char *, struct share_info *, int);
NTSTATUS (*set)(struct share_context *, const char *, struct share_info *, int);
NTSTATUS (*remove)(struct share_context *, const char *);
};
#include "param/share_proto.h"
/* list of shares options */
#define SHARE_NAME "name"
#define SHARE_PATH "path"
#define SHARE_COMMENT "comment"
#define SHARE_PASSWORD "password"
#define SHARE_HOSTS_ALLOW "hosts-allow"
#define SHARE_HOSTS_DENY "hosts-deny"
#define SHARE_NTVFS_HANDLER "ntvfs-handler"
#define SHARE_TYPE "type"
#define SHARE_VOLUME "volume"
#define SHARE_CSC_POLICY "csc-policy"
#define SHARE_AVAILABLE "available"
#define SHARE_BROWSEABLE "browseable"
#define SHARE_MAX_CONNECTIONS "max-connections"
/* I'd like to see the following options go away
* and always use EAs and SECDESCs */
#define SHARE_READONLY "readonly"
#define SHARE_MAP_SYSTEM "map-system"
#define SHARE_MAP_HIDDEN "map-hidden"
#define SHARE_MAP_ARCHIVE "map-archive"
#define SHARE_STRICT_LOCKING "strict-locking"
#define SHARE_STRICT_SYNC "strict-sync"
#define SHARE_MSDFS_ROOT "msdfs-root"
#define SHARE_CI_FILESYSTEM "ci-filesystem"
#define SHARE_DIR_MASK "directory mask"
#define SHARE_CREATE_MASK "create mask"
#define SHARE_FORCE_CREATE_MODE "force create mode"
#define SHARE_FORCE_DIR_MODE "force directory mode"
/* defaults */
#define SHARE_HOST_ALLOW_DEFAULT NULL
#define SHARE_HOST_DENY_DEFAULT NULL
#define SHARE_VOLUME_DEFAULT NULL
#define SHARE_TYPE_DEFAULT "DISK"
#define SHARE_CSC_POLICY_DEFAULT 0
#define SHARE_AVAILABLE_DEFAULT True
#define SHARE_BROWSEABLE_DEFAULT True
#define SHARE_MAX_CONNECTIONS_DEFAULT 0
#define SHARE_DIR_MASK_DEFAULT 0755
#define SHARE_CREATE_MASK_DEFAULT 0744
#define SHARE_FORCE_CREATE_MODE_DEFAULT 0000
#define SHARE_FORCE_DIR_MODE_DEFAULT 0000
/* I'd like to see the following options go away
* and always use EAs and SECDESCs */
#define SHARE_READONLY_DEFAULT True
#define SHARE_MAP_SYSTEM_DEFAULT False
#define SHARE_MAP_HIDDEN_DEFAULT False
#define SHARE_MAP_ARCHIVE_DEFAULT True
#define SHARE_STRICT_LOCKING_DEFAULT True
#define SHARE_STRICT_SYNC_DEFAULT False
#define SHARE_MSDFS_ROOT_DEFAULT False
#define SHARE_CI_FILESYSTEM_DEFAULT False
#endif /* _SHARE_H */