#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <syslog.h>
#include <libshare.h>
#include <unistd.h>
#include <note.h>
#include <smbsrv/libsmb.h>
#include <smbsrv/libsmbns.h>
#include <smbsrv/libmlsvc.h>
#include <smbsrv/smb_share.h>
#include <smbsrv/smb.h>
#define SMB_SHRF_ENCRYPT 0x8000
static void
new_share(char *name, char *path, char *comment, int flags)
{
smb_share_t si;
bzero(&si, sizeof (si));
(void) strlcpy(si.shr_name, name, MAXNAMELEN);
(void) strlcpy(si.shr_path, path, MAXPATHLEN);
(void) strlcpy(si.shr_cmnt, comment, SMB_SHARE_CMNT_MAX);
if (flags & SMB_SHRF_ENCRYPT) {
flags &= ~SMB_SHRF_ENCRYPT;
si.shr_encrypt = SMB_CONFIG_REQUIRED;
}
si.shr_flags = flags;
if (smb_shr_add(&si) != 0) {
syslog(LOG_ERR, "failed to add test share: %s",
si.shr_name);
}
}
void
shr_load_file(char *shr_file)
{
char linebuf[1024];
FILE *fp;
char *p;
char *name, *path, *comment;
fp = fopen(shr_file, "r");
if (fp == NULL) {
perror(shr_file);
return;
}
while ((p = fgets(linebuf, sizeof (linebuf), fp)) != NULL) {
name = p;
p = strpbrk(p, " \t\n");
if (p == NULL)
continue;
*p++ = '\0';
path = p;
p = strpbrk(p, " \t\n");
if (p == NULL)
comment = "";
else {
*p++ = '\0';
comment = p;
p = strchr(p, '\n');
if (p != NULL)
*p++ = '\0';
}
new_share(name, path, comment, 0);
}
(void) fclose(fp);
}
void *
smb_shr_load(void *args)
{
char *shr_file;
_NOTE(ARGUNUSED(args))
new_share("test", "/var/smb/test", "fksmbd test share",
SMB_SHRF_GUEST_OK);
new_share("testca", "/var/smb/test", "fksmbd test CA share",
SMB_SHRF_CA);
new_share("teste", "/var/smb/test", "fksmbd test encrypted share",
SMB_SHRF_ENCRYPT);
shr_file = getenv("FKSMBD_SHARE_FILE");
if (shr_file != NULL)
shr_load_file(shr_file);
return (NULL);
}
void
smb_shr_load_execinfo()
{
}
void
smb_shr_unload()
{
}